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 ответов


Я решил это, сняв флажок "Использовать автозапуск" на панели "инспектор файлов" основного представления в представлении прокрутки.

enter image description hereenter image description here

Если вы хотите сохранить "автозапуск" включен, попробуйте "редактор - > Reslove Autolayout Issues - > добавить отсутствующие ограничения". Ключевым ограничением, по-видимому, является " нижнее пространство для: Superview и в моем случае было -300, давая пространство прокрутки 300 на Боттоне представления.


Как упоминалось user2394787:

выберите контроллер вида, который имеет scrollview, затем перейдите в

Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller].  

Это заставит его работать.

Я попытался проголосовать за вышеуказанный ответ, но у меня недостаточно репутации.


Я просто решил это, перейдя к Редактор > решить проблемы автозапуска > добавить отсутствующие ограничения в View Controller

надеюсь, что это помогает.


Я просто установил "вертикальное пространство" на автоматическое постоянное значение. Может быть это поможет в некоторых случаях.

Click the "Vertical Space"

и установите его в Инспекторе атрибутов

tick that Standard

надеюсь, это поможет. Тнх.


Я не уверен, что это сработает

- (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 работает, это не идеальное решение для всех. Просто поиграйте с раскадровкой и установите ограничения для всех подвидов в виде прокрутки, чтобы установить вертикальную линию ограничений, от верхней части вида прокрутки до дно.