2013-08-25 125 views
28

我使用iAd的套件與蘋果的故事板,按照這個鏈接... Apple iAd Storyboard documentation自動佈局和子視圖

,直到我打開自動佈局上的這一切工作正常。它建立良好,但在運行時崩潰。我得到的輸出是:

2013年8月24日12:06:36.138 TabbedBanner [7272:C07] *在斷言失敗 - [UIView的layoutSublayersOfLayer:],/SourceCache/UIKit_Sim/UIKit-2380.17/UIView.m :5781 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很新,並試圖自我教導,所以任何幫助表示讚賞。非常感謝

回答

88

地址:

[self.view layoutIfNeeded]; 

這種方法的

- (void)viewDidLayoutSubviews 

裏面你BannerViewController

+15

建議使用'[self.view layoutIfNeeded]'而不是'layoutSubviews '(根據文檔,不應該直接調用它)。這應該仍然可以解決需要重新佈局的問題。 – orip

+3

如果需要調用佈局,背後的原因是什麼?是否因爲在調用viewDidLayoutSubviews之前沒有設置子視圖? – coolio

+4

當我使用Xcode 6爲iOS 8和iOS 7設計應用程序並覆蓋viewDidLayoutSubviews時,它只發生在iOS 7上。我知道在iOS 8上按照視圖生命週期的順序更改了一些內容,但是在使用iOS 8 SDK或iOS 7應用程序時發生這種情況...... iOS 7無法在第一次結束時正確佈局視圖「viewDidLayoutSubviews」調用,你必須重新佈局它們在修改東西后在被覆蓋的方法 – dulgan