Показать панель поиска в навигационной панели без прокрутки на iOS 11
Я присоединяю UISearchController к свойству navigationItem.searchController
UITableViewController на iOS 11. Это прекрасно работает: я могу использовать красивую панель поиска в стиле iOS 11.
Тем не менее, я хотел бы сделать панель поиска видимой при запуске. По умолчанию пользователь должен прокрутить таблицу вверх, чтобы увидеть панель поиска. Кто-нибудь знает, как это возможно?
![enter image description here]()
Слева: ситуация по умолчанию после запуска. Справа: строка поиска сделана видимой (путем прокрутки вверх). Я хотел бы, чтобы панель поиска была видна после запуска, как на скриншоте справа.
Я уже обнаружил, что панель поиска можно сделать видимой, установив для свойства hidesSearchBarWhenScrolling
элемента навигации значение false. Однако это приводит к тому, что панель поиска всегда видна - даже при прокрутке вниз - а это не то, что мне нужно.
Ответы
Ответ 1
Следующее делает видимым полосу прокрутки, затем позволяет скрыть ее при прокрутке:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = false
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = true
}
}
Использование isActive
не делало того, что я хотел, он делает активным полосу прокрутки (показывая кнопку отмены и т.д.), когда все, что я хочу, - это видно.
Ответ 2
Вы можете установить для свойства isActive
значение true
после добавления searchController в navigationItem
.
Именно так:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.isActive = true
}
Ответ 3
Следующее делает searchBar, чтобы стать первым респондентом:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async {
self.searchController.searchBar.becomeFirstResponder()
}
}