2012-11-29 14 views
8

Po użyciu funkcji autoLayout w komórce niestandardowej dla tableView xib, pojawia się następujący błąd.Implementacja -layoutSubviews CustomTableCellView wymaga wywołania super, NSInternalInconsistencyException

Podczas pracy w iOS 6 symulator realizacja CustomCells dnia -layoutSubviews musi wywołać super-

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: 

Podczas pracy w iOS 5 symulatorze

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

Temp Fix:

Działa to dobrze, jeśli wyłączam funkcję autoLayout w komórce niestandardowej. Lecz obsługa orientacji w tym przypadku nie jest dobra. Proszę pomóż.

+0

gdy kiedykolwiek zadzwonisz addSubview layoutSubviews kupna na tym widoku ex: [addSubview komórka: contentView]; [układ komórkiSubviews]; –

+0

podobne pytanie z działającymi rozwiązaniami: http://stackoverflow.com/questions/12610783/auto-layout-still-required-after-executing-layoutsubviews-withableviewcel –

Odpowiedz

1

System iOS 5.1 i wcześniejsze wersje nie są kompatybilne z funkcją AutoLayout. Dotyczy to tylko systemu iOS 6.0+.

Zakładając, że używasz storyboardów, jeśli chcesz korzystać z AutoLayout, ale zachowujesz zgodność z wersjami iOS wcześniejszymi niż 6.0, musisz utworzyć dwa cele: jeden na iOS 6 i drugi na iOS 5 (lub wcześniejszy) . Dla każdej z nich ustaw osobny scenorys, w którym jest włączona funkcja AutoLayout (dla systemu iOS 6), i jedna, w której nie jest (dla systemu iOS 5).

Oto wątek StackOverflow dla sprawdzonych metod z AutoLayout i kompatybilnością wsteczną z iOS 5: Enabling auto layout in iOS 6 while remaining backwards compatible with iOS 5.

Z mojego doświadczenia wynika, że ​​nie warto korzystać z AutoLayout, jeśli zależy Ci na kompatybilności wstecznej. Jeśli używasz scenorysów, bóle konserwacyjne powodują synchronizację 2 celów i 2 scenorysów. Jeśli nie używasz scenorysów, potrzebujesz osobnego kodu na iOS 5 i iOS 6, który będzie wymagał więcej czasu na sprawdzenie i aktualizację.

5
layoutSubviews needs to call super 

Można pracować na systemie iOS6, umieszczając wszystko w niestandardowej komórce widoku tabeli w widoku kontenera. tj. Utwórz nowy widok, aby wypełnić komórkę, a następnie umieść w niej elementy sterujące itp. Również upewnić się ustawić:

[theContainerView setTranslatesAutoresizingMaskIntoConstraints:NO]; 

do pojemnika i subviews

+0

Gdzie ustawiasz translatesautorisizingMaskIntoConstraints na? W metodzie initWithStyle lub ViewDidLoad lub w innym miejscu? – c0d3Junk13

Powiązane problemy