2015-03-10 6 views
1

Итак, я уже пару дней пытаюсь понять мои проблемы, пытаясь понять эту проблему. Контекст: У меня есть пользовательский UIPageViewController, который я добавляю в качестве дочернего элемента в другой контроллер представления. Это отлично работает в прошивкой 8, но происходит сбой из-за ошибки в прошивкой 7.1:Авария, связанная с AutoLayout в iOS 7: «Выполнение _UIPageViewControllerContentView -layoutSubviews требует вызова супер».

*** отказ Assertion в - [_ UIPageViewControllerContentView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2935.137/UIView. m: 8794

*** Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Автомакет еще требуется после выполнения -layoutSubviews. Реализация _UIPageViewControllerContentView -layoutSubviews требует вызова super. '

Это аналогичная проблема с одной размещена here и в некоторых других местах, но ни одно из решений не работали для меня пока (и я попытался много).

Теперь интересно то, что, если я не добавляю никаких подзонов или каких-либо контроллеров просмотра страниц, он запускается. Но если я пишу это в viewDidLoad, это достаточно, чтобы сделать его падение с той же ошибкой, как и выше:

UIView *myView = [[UIView alloc] init]; 
myView.translatesAutoresizingMaskIntoConstraints = NO; 
[self.view addSubview:myView]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[myView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myView)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[myView(60)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myView)]]; 

Или, если добавить контроллеры просматривать страницы, он выходит из строя с той же ошибкой, как только я перейти к ним.

Я попытался добавить это в моем наследнике UIPageViewController, как советовал here, но это не помогло:

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    [self.view layoutIfNeeded]; 
} 

Я подозреваю, что это ошибка с реализацией _UIPageViewControllerContentView, но я не знаю точно, и не выяснили, как swizzle его метод layoutSubviews (например, here), так как это частный класс.

Вот как я добавить мой вид страницы контроллера к родителю:

self.myPageViewController = [[MyPageViewController alloc] initWithObject:object]; 
[self addChildViewController:self.myPageViewController]; 

self.myPageViewController.view.translatesAutoresizingMaskIntoConstraints = NO; 
[self.containerView addSubview:self.myPageViewController.view]; 
[self.myPageViewController didMoveToParentViewController:self]; 

NSDictionary *viewsDictionary = @{@"pageView" : self.myPageViewController.view}; 
[self.containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[pageView]-0-|" options:0 metrics:nil views:viewsDictionary]]; 
[self.containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[pageView]-0-|" options:0 metrics:nil views:viewsDictionary]]; 

Я был бы взволнован, если кто-то решение этой проблемы. Если любые другие детали могут помочь, я был бы рад предоставить их здесь. Благодарю.

ответ

2

У меня такая же проблема, как и вы, и только что нашел это answer. В основном автоматический макет не поддерживается в UIPageViewController на iOS 7, поэтому замените его на пользовательский контроллер контейнера.

+0

Да, я просто написал свой собственный подкласс UIScrollViewController, который я вроде хотел или должен был сделать в любом случае. Жаль, что я не сделал это с самого начала ... – erwald

+0

Большое спасибо – krishnanunni

Смежные вопросы