Пользовательский вид заголовка в виде большого заголовка в новой навигационной панели iOS 11
Я использую кнопку в качестве заголовка для моего UITableViewController
который открывает выпадающий список категорий. Выбор категории фильтрует содержимое табличного представления по выбранной категории.
На кнопке отображается название выбранной категории плюс небольшая стрелка, аналогично тому, как раньше выглядела iBooks (или, возможно, все еще выглядит? Я давно ее не использовал). Поэтому я хотел бы, чтобы он имел то же поведение, что и стандартный заголовок, и сначала он был бы большим и свернулся при прокрутке табличного представления.
Есть ли способ сделать это?
Спасибо
4 ответа
Кажется, из-за новых больших заголовков IOS11 требует, чтобы были установлены ограничения для настраиваемого представления в navigationItem.titleView.
Сделайте это например:
customView.widthAnchor.constraint(equalToConstant: 200).isActive = true
customView.heightAnchor.constraint(equalToConstant: 44).isActive = true
self.navigationItem.titleView = customView
Обратите внимание, что это должно быть сделано для ширины и высоты.
Он должен работать. Не нужно добавлять кнопку, по крайней мере, в моем случае...
Apple предложила сделать так, чтобы у вас не было пользовательских представлений нулевого размера. См. Слайд 33 в https://developer.apple.com/videos/play/wwdc2017/204/
Похоже, что штрихи сломаны для navigationItem.titleView. Жесты, касания событий и кнопок - ничего не работает
Похоже, ошибка в iOS 11: https://forums.developer.apple.com/thread/82466
Я временно реализовал этот обходной путь:
private lazy var navBarActionButtonIOS11: UIButton = {
button.addTarget(self.navTitleView, action: #selector(self.navTitleView.didTapView), for: .touchUpInside)
return button
}()
[...]
navigationItem.titleView = navTitleView
if #available(iOS 11.0, *), let navBar = navigationController?.navigationBar {
navBarActionButtonIOS11.removeFromSuperview()
navBar.addSubview(navBarActionButtonIOS11)
navBarActionButtonIOS11.center.x = navBar.center.x
}
Другое решение может состоять в том, чтобы просто назначить UIB-кнопку для navigationItem.titleView напрямую.
Я надеюсь, что Apple исправит это в ближайшее время!
Ну, у меня была такая же проблема. У меня есть UIButtons в UINavigationItem.titleView, и они вообще не реагировали на прикосновения. Проблема в том, что вид, где эти кнопки имеют размер (0,0) из-за автоматического размещения. Таким образом, чтобы решить эту проблему, вам нужно добавить дополнительный вид в ваш пользовательский вид, давайте назовем его "contentView" и поместим все ваши элементы управления внутри этого contentView. Кроме того, contentView должен иметь определенный размер с ограничениями. Быстрый тест заключается в добавлении ограничений ширины и высоты для contentView. И все снова работает.
Надеюсь, что это кому-то поможет.