UIScrollView не прокручивается после обновления до iOS7 / xcode 5
у меня есть приложение, которое в xcode 4.5 и ios 6.1 отлично работало при прокрутке. Однако после загрузки xcode 5 и iOS 7 мои представления прокрутки больше не работают.???
вот мой .H-файл:
#import <UIKit/UIKit.h>
@interface GrillretterViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIScrollView *grillretterScroller;
@property (assign) CGPoint rememberContentOffset;
@end
а вот мой .файл м:
#import "GrillretterViewController.h"
@interface GrillretterViewController ()
@end
@implementation GrillretterViewController
@synthesize grillretterScroller, rememberContentOffset;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[grillretterScroller setScrollEnabled:YES];
// Do any additional setup after loading the view.
}
- (void) viewDidAppear:(BOOL)animated {
[grillretterScroller setContentSize:CGSizeMake(300, 915)];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
self.grillretterScroller.contentOffset = CGPointMake(0, 0);
}
- (void)viewWillDisappear:(BOOL)animated {
self.rememberContentOffset = self.grillretterScroller.contentOffset;
[super viewWillDisappear:animated];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.grillretterScroller.contentOffset = CGPointMake(0, self.rememberContentOffset.y);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
пожалуйста, помогите! Я застрял!
С наилучшими пожеланиями!
9 ответов
Я решил это, сняв флажок "Использовать автозапуск" на панели "инспектор файлов" основного представления в представлении прокрутки.
Если вы хотите сохранить "автозапуск" включен, попробуйте "редактор - > Reslove Autolayout Issues - > добавить отсутствующие ограничения". Ключевым ограничением, по-видимому, является " нижнее пространство для: Superview и в моем случае было -300, давая пространство прокрутки 300 на Боттоне представления.
Как упоминалось user2394787:
выберите контроллер вида, который имеет scrollview, затем перейдите в
Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller].
Это заставит его работать.
Я попытался проголосовать за вышеуказанный ответ, но у меня недостаточно репутации.
Я просто решил это, перейдя к Редактор > решить проблемы автозапуска > добавить отсутствующие ограничения в View Controller
надеюсь, что это помогает.
Я просто установил "вертикальное пространство" на автоматическое постоянное значение. Может быть это поможет в некоторых случаях.
и установите его в Инспекторе атрибутов
надеюсь, это поможет. Тнх.
Я не уверен, что это сработает
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
}
- (void)viewDidLayoutSubviews {
[self performSelector:@selector(updateContentSize)
withObject:nil
afterDelay:0.25];
}
-(void)updateContentSize{
UIView *viewLast = [viewContent viewWithTag:100];
scrollViewAd.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, CGRectGetMaxY(viewLast.frame));
}
У меня не было фиксированной высоты, поэтому я установил contentsize scrollview в коде в соответствии с моей меткой внутри scrollview
CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height);
[self.scrollView setContentSize:scrollViewContentSize];
с включенным автозапуском убедитесь, что вертикальный интервал (@"V:|-[subview]-|") применяется между UIScrollView и его subview. Если scrollView предназначен для горизонтальной прокрутки, примените горизонтальный интервал (@"H:|-[subview] -/").
У меня была та же проблема после разработки приложения для iOS8, а затем тестирования на iOS7. Хотя я попытался установить определенные параметры в представлении прокрутки, такие как:
[self.scrollView setScrollEnabled:YES];
[self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 700)];
[self.scrollView setContentOffset:CGPointZero];
решение, которое сработало для меня, состояло в том, чтобы войти в файл раскадровки и убедиться, что у вас есть ограничения для всех представлений в представлении прокрутки. Размер содержимого представления прокрутки рассчитывается по ограничениям каждого подвида в представлении прокрутки, поэтому в моем случае у меня были UIView и UITableView. После установки ограничений для UIView (top, leading, trailing, height) и UITableView (вертикальное расстояние до UIView, leading, trailing, bottom) вид прокрутки рассчитал размер содержимого и начал функционировать.
при выключении Auto Layout работает, это не идеальное решение для всех. Просто поиграйте с раскадровкой и установите ограничения для всех подвидов в виде прокрутки, чтобы установить вертикальную линию ограничений, от верхней части вида прокрутки до дно.