2012-11-29 25 views
8

關於在tableView xib的自定義單元格中使用autoLayout,我得到以下錯誤。CustomTableCellView的-layoutSubviews實現需要調用超級,NSInternalInconsistencyException

當在iOS 6中運行模擬器 CustomCells的實現-layoutSubviews的需要調用超

Assertion failure in 

-[CustomCells layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView 
    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. CustomCells's implementation of -layoutSubviews needs to call super.' 
    *** First throw call stack: 

當iOS 5的模擬器中運行

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The NIB data is invalid.' 
*** First throw call stack: 

溫度修正:

如果我禁用自定義單元格中的autoLayout,它工作正常。 但在這種情況下方向處理不好。請幫忙。

+0

當過你調用該視圖addSubview調用layoutSubviews 例如: [細胞addSubview:內容查看]。 [cell layoutSubviews]; –

+0

與工作解決方案類似的問題:http://stackoverflow.com/questions/12610783/auto-layout-still-required-after-executing-layoutsubviews-with-uitableviewcel –

回答

1

iOS 5.1及更早版本與AutoLayout不兼容。它僅適用於iOS 6.0+。您需要創建兩個目標:一個用於iOS 6,另一個用於iOS 5(或更早版本)。如果您想使用故事板,但如果要使用AutoLayout但仍保持與6.0之前的iOS版本的兼容性, 。對於每一個,設置一個單獨的故事板,其中一個啓用了AutoLayout(適用於iOS 6),另一個不適用於iOS 5。

下面是一個StackOverflow線程,其中介紹了AutoLayout的最佳實踐並向後兼容iOS 5:Enabling auto layout in iOS 6 while remaining backwards compatible with iOS 5

根據我的經驗,如果您需要向後兼容性,不值得使用AutoLayout。如果你使用故事板,有2個目標和2個故事板進行同步是一個維護頭痛的問題。如果您不使用故事板,則需要iOS 5和iOS 6的單獨代碼,這需要更長的時間才能進行測試和更新。

5
layoutSubviews needs to call super 

可以在iOS6上將所有內容放在容器視圖中的自定義tableview單元格中。即創建一個新的視圖來填充單元格,然後將控件等放在裏面。另外,請確保您設置:

[theContainerView setTranslatesAutoresizingMaskIntoConstraints:NO]; 

的容器和子視圖

+0

你在哪裏設置translatesautorisizingMaskIntoConstraints到?在initWithStyle方法或ViewDidLoad或其他地方? – c0d3Junk13