Ответ 1
это очень просто.
В вашем DetailView вы должны установить navigationItem.largeTitleDisplayMode на .never
(не navigationController?.navigationItem.largeTitleDisplayMode !!)
navigationItem.largeTitleDisplayMode = .never
У меня есть UITableView и подробный вид, встроенный в UINavigationController, так: Я хотел бы включить большие заголовки для "Мои заметки", но я бы хотел отключить его для подробного просмотра. Что-то вроде того, как приложение Mail по умолчанию работает на iPhone. Как я могу изменить панель навигации, prefersLargeTitle
свойство prefersLargeTitle
во время этого сеанса?
это очень просто.
В вашем DetailView вы должны установить navigationItem.largeTitleDisplayMode на .never
(не navigationController?.navigationItem.largeTitleDisplayMode !!)
navigationItem.largeTitleDisplayMode = .never
Любой из двух следующих, решит вашу проблему:
set предпочитаетLargeTitles для false для вашего navigationBar
self.navigationController?.navigationBar.prefersLargeTitles = false
set largeTitleDisplayMode никогда не для navigationItem (примечание: prefersLargeTitles должно быть false, иначе это не сработает)
self.navigationController?.navigationItem.largeTitleDisplayMode = .never
Примечание: если prefersLargeTitles
является истинным, то largeTitleDisplayMode =.never не будет работать. Малый заголовок для панели навигации зависит от prefersLargeTitles
Это позволит использовать режим большого заголовка, если оно истинно
self.navigationController?.navigationBar.prefersLargeTitles = true
У меня была такая же проблема только сейчас.
Мой прецедент:
MasterVC: базовая панель навигации без largeTitle
DetailVC: включен большой заголовок
→ Вернувшись к MasterVC из DetailVC, я увидел странную анимацию, которая показывала большой титр на Мастере в течение секунды, прежде чем вернуться к базовому макету non largeTitle. Это выглядело как глюк.
Я исправил это, следуя этому подходу:
В MasterVC - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
navigationController?.navigationBar.prefersLargeTitles = false
}
В деталяхVC - viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
Надеюсь, это поможет другим.
Следует отметить, что если вы установили largeTitleDisplayMode
в значение never и prefersLargeTitles
значение prefersLargeTitles
в false для подробного ViewController
, небольшой заголовок будет отображаться в течение секунды при переходе от подробного ViewController
к предыдущему ViewController
через кнопку возврата UINavigationBar
.
Используйте willMove(toParent:)
чтобы изменить заголовок до выполнения перехода.
override func willMove(toParent parent: UIViewController?) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
} else {
// Fallback on earlier versions
}
Это может быть очень поздно, но это может быть полезно для кого-то..
включите приведенный ниже код в свой подробный контроллер представления под viewDidLoad
navigationItem.largeTitleDisplayMode = .never
.navigationBarTitle("Title", displayMode: .inline)