Ошибка утверждения в - [UITableView layoutSublayersOfLayer:]

Я хочу использовать UISearchDisplayController на UIViewController, который включает UITableView.
Я использую Autolayout. Когда я пытаюсь поместить SearchBar (_searchBar) в tableHeaderView с помощью

self.tableView.tableHeaderView = _searchBar;

Я получаю ошибку 'NSInternalInconsistencyException', причина: "Автоматическая компоновка по-прежнему требуется после выполнения -layoutSubviews. Реализация UITableView -layoutSubviews требует вызова super. '

Отключение автоспуска, ошибка исчезает, но я требуется Автоотключение...

Ошибка появляется, когда я использую пользовательские ячейки или стандартные символы...

Ошибка появляется, когда TableView не имеет строк...

Ответ 1

Как общее решение этой проблемы или, по крайней мере, способ найти причину этого:

  • Включить контрольные точки исключения
  • Подкласс UITableView и переопределить layoutSublayersOfLayer:, просто вызывая super
  • Запустите приложение - вы остановите свой новый метод.
  • В отладчике введите po [self _autolayoutTrace]

Это покажет вам распечатку каждого вида в окне с представлениями, в которых автоматический макет не смог найти решение, выделенное звездочками или AMBIGUOUS LAYOUT. Это те взгляды, которые вам нужны для изучения ограничений.

Ответ 2

При добавлении subview в UITableView существуют некоторые специфические требования для subview. Подумайте о добавлении subview в другое представление (супервизор) в контроллере вместо UITableView.

"Автоматический макет все еще требуется после выполнения -layoutSubviews" с подклассом UITableViewCell