2014-04-11 11 views
11

Chcę użyć UISearchDisplayController na UIViewController, który zawiera UITableView.
Używam Autolayout. Kiedy próbuję umieścić paska wyszukiwania (_searchBar) w tableHeaderView zBłąd asercji w - [Układ UITableViewSublayersOfLayer:]

self.tableView.tableHeaderView = _searchBar; 

pojawia się błąd „NSInternalInconsistencyException”, powód: „Auto Layout nadal wymagane po wykonaniu -layoutSubviews. Implementacja UlayableView -layoutSubviews wymaga połączenia super. '

Wyłączenie autoLayout, błąd znika, ale trzeba autoLayout ...

pojawi się błąd, gdy używam komórki zwyczaj lub StandardCells ...

pojawi się błąd, gdy Tableview ma brak wierszy ...

Odpowiedz

16

Jako ogólną rozwiązanie tego problemu lub przynajmniej sposób znalezienia przyczyny to:

  • Włącz wyjątkiem punktów przerwania
  • Podklasa UITableView i zastąpić layoutSublayersOfLayer:, tylko dzwoni super
  • Uruchom aplikację - zatrzymasz się w nowej metodzie
  • W debugerze wpisz po [self _autolayoutTrace]

To pokaże wydruk każdego widoku w oknie, z widokiem gdzie układ auto nie był w stanie wymyślić rozwiązanie podświetlonego gwiazdkami lub AMBIGUOUS LAYOUT. Są to poglądy potrzebne do zbadania ograniczeń.

+0

W projektach Swift: 'expr -l objC++ -o - [[UIWindow keyWindow] _autolayoutTrace] '(źródło: https://carpeaqua.com/2015/07/07/auto-layout-debugging-in-swift/) –

6

Podczas dodawania subview do UITableView istnieją pewne specyficzne wymagania dla subview. Rozważ dodanie subview do innego widoku (superview) w kontrolerze zamiast UITableView.

"Auto Layout still required after executing -layoutSubviews" with UITableViewCell subclass

+1

Jak wskazuje Vladimir w swojej odpowiedzi, automatyczne wyświetlanie widoku w tableView prawdopodobnie spowoduje pojawienie się tego błędu (w samej tabeli lub nawet autolayouting tableViewHeader/Footer). Tak jak w wyjaśnieniu zauważam, że ten błąd może nie pojawić się w niektórych układach w systemie iOS 8, ale z pewnością pojawi się w iOS 7. – fbeeper

Powiązane problemy