Я прикрепляю UISearchController к navigationItem.searchController
свойству UITableViewController в iOS 11. Это отлично работает: я могу использовать красивую панель поиска в стиле iOS 11.
Однако я бы хотел, чтобы панель поиска была видна при запуске. По умолчанию пользователь должен прокрутить таблицу вверх, чтобы увидеть панель поиска. Кто-нибудь знает, как такое возможно?
Слева: ситуация по умолчанию после запуска. Справа: панель поиска становится видимой (путем прокрутки вверх). Я бы хотел, чтобы после запуска была видна панель поиска, как на правом скриншоте.
Я уже обнаружил, что панель поиска можно сделать видимой, установив для свойства hidesSearchBarWhenScrolling
моего элемента навигации значение false. Однако это приводит к тому, что панель поиска всегда видна - даже при прокрутке вниз - а это не то, что мне нужно.
источник
hidesSearchBarWhenScrolling
firstResponder
?scrollView.setContentOffset(_:animated)
. У кого-нибудь есть предложение?hidesSearchBarWhenScrolling = false
помещает строку поиска над большим заголовком в iOS 13. Есть идеи, могу ли я как-нибудь обновить это?Ответы:
Следующее делает панель поиска сначала видимой, а затем позволяет ей скрыться при прокрутке:
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
не сделало того, что я хотел, оно делает панель поиска активной (показывает кнопку отмены и т. Д.), Когда все, что мне нужно, это чтобы она была видна.источник
viewDidLoad
вместоviewWillAppear
searchController.searchBar.isHidden = false
во viewDidLoad нет? Последнее кажется мне гораздо более логичнымВы можете установить для свойства
isActive
значениеtrue
после добавления searchController вnavigationItem
.Именно так:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) searchController.isActive = true }
источник
isActive
является логическим только для чтения.searchController.active = true
Вместо этого вы захотите использовать .Для меня это сработало после добавления следующих строк в
viewDidLoad()
метод:navigationController?.navigationBar.prefersLargeTitles = true navigationController!.navigationBar.sizeToFit()
источник
На iOS 13 ответ @Jordan Wood не сработал. Вместо этого я сделал:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIView.performWithoutAnimation { searchController.isActive = true searchController.isActive = false } }
источник