Ошибка утверждения в - [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