UISearchBar в виде таблицы iPad исчезает под панелью контроллера навигации - PullRequest
4 голосов
/ 21 марта 2012

Я работаю над универсальным приложением, использующим раскадровки, и я добавил UISearchBar и UISearchDisplayController к одному из моих табличных представлений.Я все это подключил, и могу хорошо искать.Проблема в том, что я помещаю новый контроллер представления в стек навигации.На iPhone это нормально, но на iPad это приводит к смещению контроллера толкания под панелью навигации (мне пришлось вручную заставить панель навигации появляться снова, чтобы вы могли вернуться).

Затем, когда вы вернетесь к исходному табличному представлению, где выполнялся поиск, поиск все еще активен, но UISearchBar теперь скрыт за панелью навигации, что означает, что нет способа отменить его без удаления запроса.Это также означает, что его больше нельзя использовать, поскольку вы не можете вернуться к нему.

Вероятно, лучше всего это проиллюстрировать с помощью некоторых снимков экрана.

Вот как это выглядит при первом открытииtableview:

enter image description here

Тогда поиск будет нормальным:

Doing the search is fine

Нажав на следующий экран, мы увидимпроблема:

enter image description here

И затем вернуться на исходный экран, все еще выполняя поиск, но без окна поиска:

Search box half-buried

ЗатемЕсли я удаляю все из окна поиска и избавляюсь от наложения, я могу видеть окно поиска, когда прокручиваю представление таблицы вверх, но никогда не могу добраться до него.Я не могу получить надежный снимок экрана с этим.

Я везде искал решение, но не смог найти его.Я пытался вызвать [self setNeedsDisplay] и [self setNeedsLayout] в методе viewDidAppear, но это, похоже, не дает никакого эффекта.Похоже, что он исправляется, если я изменяю ориентацию устройства, и я пытался воспроизвести то, что он будет делать в этой ситуации, вызывая эти методы.

Структура раскадровки iPad: SplitViewController -> Навигационный контроллер -> UITabBarController -> UITableViewController (содержит UISearchBar etc.f) -> UITableViewController

1 Ответ

1 голос
/ 23 апреля 2012

Я отправил эту проблему в Apple DTS, и они ответили:

Структура раскадровки iPad: SplitViewController -> Контроллер навигации -> UITabBarController -> UITableViewController (содержит UISearchBar и т. Д.) -> UITableViewController

Дело в том, что архитектура вашего проекта не соответствует нашим рекомендациям, а именно: Из раздела Интерфейсы контроллера комбинированного представления в каталоге View Controller для iOS: Однако при объединении контроллеров представления важен порядок локализации; действительны только определенные договоренности. Порядок содержания от ребенка к родителю выглядит следующим образом:

Контроллеры представления содержимого и контроллеры представления контейнера, имеющие гибкие границы (например, контроллер представления страницы) Контроллер навигационного представления Контроллер панели вкладок Контроллер с разделенным видом

По сути, вы должны иметь следующую структуру: SplitViewController -> UITabBarController -> Контроллер навигации-> UITableViewController (содержит UISearchBar и т. Д.) -> UITableViewController>

...