Autolayout和子视图

Kev*_*arr 28 subview iad subviews autolayout

我正在使用带有Apple的故事板的iAd套件,根据此链接... Apple iAd Storyboard文档

一切正常,直到我打开autolayout.它构建良好,但在运行时崩溃.我得到的输出是:

2013-08-24 12:06:36.138 TabbedBanner [7272:c07] *断言失败 - [UIView layoutSublayersOfLayer:],/ SourceCache/UIKit_Sim/UIKit-2380.17/UIView.m:578 2013-08-24 12:06: 36.139 TabbedBanner [7272:c07]*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'将-viewDidLayoutSubviews发送到视图控制器后仍需要自动布局.BannerViewController的实现需要将-layoutSubviews发送到视图以调用自动布局.***第一掷调用堆栈:(0x1e27012 0x110ee7e 0x1e26e78 0xba4665 0xa347a 0x11226b0 0x1358fc0 0x134d33c 0x1358eaf 0x1422bd 0x8ab56 0x8966f 0x89589 0x887e4 0x883ef 0x65c9d 0x5098b 0x5194b 0x62cb5 0x63beb 0x55698 0x1700df9 0x1700ad0 0x1d9cbf5 0x1d9c962 0x1dcdbb6 0x1dccf44 0x1dcce1b 0x5117a 0x52ffc 0x2a0d 0x2935)的libc ++ abi.dylib:终止叫抛出异常(lldb)

我知道这与故事板中的子视图有关,但我不知道如何纠正这个错误.我是iOS的新手,并试图自学,所以任何帮助表示赞赏.非常感谢

jun*_*jie 88

加:

[self.view layoutIfNeeded];
Run Code Online (Sandbox Code Playgroud)

到这个方法的最后

- (void)viewDidLayoutSubviews
Run Code Online (Sandbox Code Playgroud)

你的内心 BannerViewController

  • 考虑使用`[self.view layoutIfNeeded]`而不是`layoutSubviews`(根据文档,不应该直接调用).这仍然应该解决需要重新布局的问题. (15认同)
  • 在使用Xcode 6为iOS 8和7设计应用程序并覆盖viewDidLayoutSubviews时,仅在iOS 7上发生这种情况.我知道iOS 8上的视图生命周期顺序发生了一些变化,但是当使用iOS 8 SDK或iOS 7应用程序时,这种情况正好发生... iOS 7无法在第一个结尾处正确布局视图viewDidLayoutSubviews"调用,你必须在覆盖方法中修改东西后重新布局它们 (4认同)
  • 如果需要,需要调用布局的原因是什么?是否因为在调用viewDidLayoutSubviews之前未设置子视图? (3认同)