iphone x: держать панель поиска в безопасной зоне

Обновление нашего приложения для поддержки iPhone X. Как добавить панель поиска в заголовок табличного представления и поместить его в безопасную зону? Вот как мы сейчас строим панель поиска.

let searchController = UISearchController(searchResultsController: nil)
func buildSearchBar() {
    self.searchController.searchResultsUpdater = self
    self.searchController.hidesNavigationBarDuringPresentation = false
    self.searchController.dimsBackgroundDuringPresentation = false
    self.searchController.searchBar.sizeToFit()
    self.tableView.tableHeaderView = searchController.searchBar

    self.definesPresentationContext = true
}

2 ответа

Решение

Непонятно, что вы подразумеваете под "в пределах безопасной зоны". Табличное представление может прокручиваться, поэтому панель поиска не обязательно находится "внутри" какой-либо части экрана; его можно прокручивать за областью датчика и дальше.

Тем не менее, вы заметите, что нативные приложения не помещают панель поиска в качестве заголовка таблицы. Они поместили это в панель навигации. Вы должны сделать то же самое. Поместите панель поиска в панель навигации, установив searchController из navigationItem,

Эта тема подробно обсуждается в видео " Создание приложений для iPhone X". ( Дизайн для iPhone X тоже хорошее видео.)

В итоге Apple предлагает использовать навигационный контроллер и показать его там:

let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false

if #available(iOS 11, *) {
    navigationItem.searchController = searchController
    searchController.isActive = true
} else {
    present(searchController, animated: true)
}

(Кстати, даже при отсутствии навигационного контроллера, present-направление контроллера поиска вместо установки в качестве заголовка таблицы может помешать его прокрутке из безопасной области.)

Другие вопросы по тегам