返回主视图控制器时,“仍然需要自动布局...”崩溃

时间:2014-08-28 20:26:55

标签: ios exception autolayout

我的应用程序使用主菜单启动,该主菜单是名为UIViewController的{​​{1}}的自定义子类。它嵌入在LVSMainViewController中,它被设置为故事板中的初始VC。 UINavigationController实施LVSMainViewController

点击按钮会将用户带到应用程序的不同部分(另一个VC)。用户通过连接到推送segue的按钮返回主菜单。但是当应用程序再次加载主菜单VC时,它会崩溃并显示以下消息:

  

2014-08-28 16:11:14.122 *断言失败 - [UIView layoutSublayersOfLayer:],/ SourceCache / UIKit_Sim / UIKit-2935.137 / UIView.m:8803

     

2014-08-28 16:11:14.257 *由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'在向视图控制器发送-viewDidLayoutSubviews后仍然需要自动布局。 LVSMainViewController的实现需要将-layoutSubviews发送到视图以调用自动布局。'

SO上的其他帖子在以编程方式设置自动布局约束时报告相同的错误(我没有这样做,虽然我在故事板中使用自动布局)和/或使用-viewDidLayoutSubviews时(我是虽然我在应用程序的其他地方使用它,但没有在主菜单VC或它所使用的VC中使用。 (请参阅herehere。)

其他难题:

  1. 我尝试在UITableView的末尾添加[self.view layoutSubviews];。当我这样做时它并没有崩溃。但由于Apple's documentation

    ,这似乎是不明智的
      

    您不应该直接调用此方法。如果你想强迫一个   布局更新,请先调用setNeedsLayout方法   到下一个图纸更新。

  2. 如果我在-viewDidLayoutSubviews的末尾添加[self.view setNeedsLayout];,应用程序崩溃首先加载主菜单VC,而不是在我离开并返回时。

    < / LI>

    可能导致这种情况的原因??

2 个答案:

答案 0 :(得分:14)

崩溃被神奇地修复的原因可能是因为您现在使用的是iOS 8.您是否尝试在iOS7上运行此代码?

通过致电[self.view layoutSubviews],您接近答案。

请尝试拨打[self.view layoutIfNeeded]

请参阅以下帖子:

Autolayout and subviews

Auto Layout error

答案 1 :(得分:-4)

在Xcode 6.0.1中神奇地修复了崩溃。