iOS 7中与AutoLayout相关的崩溃:“_ UIPageViewControllerContentView的-layoutSubviews实现需要调用super。”

时间:2015-03-10 12:48:59

标签: ios objective-c iphone autolayout

所以我现在已经绞尽脑汁想要解决这个问题了几天。上下文:我有一个自定义UIPageViewController,我将其作为子项添加到另一个视图控制器。 这在iOS 8 中工作得非常好,但在iOS 7.1中崩溃并出现以下错误:

  

***断言失败 - [_ UIPageViewControllerContentView layoutSublayersOfLayer:],/ SourceCache / UIKit_Sim / UIKit-2935.137 / UIView.m:8794

     

***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'执行-layoutSubviews后仍然需要自动布局。 _UIPageViewControllerContentView&-outoutSubviews的实现需要调用super。'

这与发布here和其他一些地方的问题类似,但是没有一个解决方案对我有用(我已经尝试了很多)。< / p>

现在,有趣的是,如果我不添加任何子视图或任何页面视图控制器,它就会运行。但是如果我在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实现的错误,但我不确定,并且还没有弄清楚如何调整其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]];

如果有人能解决这个问题,我会很激动。如果任何其他细节可能有所帮助,我很乐意在这里提供。感谢。

1 个答案:

答案 0 :(得分:2)

我遇到与您完全相同的问题,并且发现了answer。基本上,iOS 7上的UIPageViewController不支持自动布局,因此请将其替换为自定义容器控制器。