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
И вот мой .m файл:
#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
ПОЖАЛУЙСТА, помогите! Я застрял!
С уважением!
Ответы
Ответ 1
Я решил это, сняв флажок "Использовать автозапуск" в панели "Инспектор файлов" основного вида в представлении прокрутки.
![enter image description here]()
![enter image description here]()
Если вы хотите, чтобы функция "Автозапуск" была включена, попробуйте "Редактор → Повторить проблемы автоаудита → Добавить недостающие ограничения". Ключевым ограничением, по-видимому, является "Bottom Space to: Superview", и в моем случае было -300, что дало 300 прокруток на botton view.
Ответ 2
Как указано пользователем2394787:
Выберите свой контроллер просмотра с прокруткой, затем перейдите к
Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller].
Это заставило бы его работать.
Я попытался проголосовать за вышеприведенный ответ, но у меня недостаточно отзывов.
Ответ 3
Я просто решил это, перейдя к
Редактоp > Разрешить проблемы автозапускa > Добавить отсутствующие ограничения в контроллере просмотра
Надеюсь, это поможет.
Ответ 4
Я просто установил "Вертикальное пространство" в значение автоматической константы. Может быть, это поможет в некоторых случаях.
![Click the "Vertical Space"]()
и установите его в инспекторе атрибутов
![tick that Standard]()
Я надеюсь, что это поможет. спасибо.
Ответ 5
Я не уверен, что это сработает
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
}
Ответ 6
- (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));
}
Ответ 7
У меня не было фиксированной высоты, поэтому я устанавливаю содержимое прокрутки в коде в соответствии с моей меткой внутри scrollview
CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height);
[self.scrollView setContentSize:scrollViewContentSize];
Ответ 8
При включенном автозапуске убедитесь, что между UIScrollView и его подвью используется вертикальное расстояние (@ "V: | - [subview] - |" ). Если ваш scrollView предназначен для горизонтальной прокрутки, примените горизонтальный интервал (@ "H: | - [subview] - |" ).
Ответ 9
У меня была такая же проблема после разработки приложения для iOS8, а затем тестирование на iOS7.
Хотя я пробовал установить определенные параметры в представлении прокрутки, например:
[self.scrollView setScrollEnabled:YES];
[self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 700)];
[self.scrollView setContentOffset:CGPointZero];
Решение, которое сработало для меня, заключалось в том, чтобы зайти в файл раскадровки и убедиться, что у вас есть ограничения, установленные для всех видов в прокрутке. Размер содержимого представления прокрутки вычисляется ограничениями каждого поднабора в представлении прокрутки, поэтому в моем случае у меня были UIView и UITableView. После установки ограничений для UIView (верхний, верхний, конечный, высота) и UITableView (вертикальный интервал до UIView, ведущий, конечный, нижний), прокрутка отображает размер содержимого и начинает функционировать.
При выключении Auto Layout это работает, это не идеальное решение для всех. Просто поиграйте со Storyboard и установите ограничения для всех подпунктов в представлении прокрутки, чтобы установить вертикальную линию ограничений, начиная с верхней части прокрутки и снизу.