Итак, я уже пару дней пытаюсь понять мои проблемы, пытаясь понять эту проблему. Контекст: У меня есть пользовательский 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]];
Я был бы взволнован, если кто-то решение этой проблемы. Если любые другие детали могут помочь, я был бы рад предоставить их здесь. Благодарю.
Да, я просто написал свой собственный подкласс UIScrollViewController, который я вроде хотел или должен был сделать в любом случае. Жаль, что я не сделал это с самого начала ... – erwald
Большое спасибо – krishnanunni