【发布时间】:2015-03-10 12:48:58
【问题描述】:
所以我这几天一直在绞尽脑汁想弄清楚这个问题。上下文:我有一个自定义 UIPageViewController ,我将其作为孩子添加到另一个视图控制器。 这在 iOS 8 中运行良好,但在 iOS 7.1 中崩溃并出现以下错误:
*** -[_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)]];
或者,如果我添加页面视图控制器,它会在我导航到它们时立即崩溃并出现相同的错误。
我已尝试按照here 的建议将其添加到我的子类 UIPageViewController 中,但它也无济于事:
- (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]];
如果有人能解决这个问题,我会很高兴。如果任何其他细节可能有帮助,我很乐意在这里提供。谢谢。
【问题讨论】:
标签: ios objective-c iphone autolayout