it-swarm.com.ru

Как отключить большие заголовки для UINavigationBar?

У меня есть UITableView и подробный вид, встроенный в UINavigationController следующим образом:  enter image description here Я хотел бы включить большие заголовки для «Мои заметки», но я хотел бы отключить его для подробного просмотра. Что-то вроде того, как почтовое приложение по умолчанию работает на iPhone. Как бы я изменил свойство prefersLargeTitle панели навигации во время этого перехода? 

10
A Tyshka

У меня была такая же проблема только сейчас. 

Мой вариант использования: 

MasterVC: базовая панель навигации без большого заголовка 

DetailVC: LargeTitle включен 

-> Когда я возвращался к MasterVC из DetailVC, я видел странную анимацию, которая на секунду показала LargeTitle на Master, прежде чем вернуться к базовому макету 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
} 

Я надеюсь, что это может помочь другим.

3
Edouard Barbier

Любое из следующих двух решений решит вашу проблему:

  1. установите prefersLargeTitles в false для вашей панели навигации

    self.navigationController?.navigationBar.prefersLargeTitles = false
    
  2. установите largeTitleDisplayMode в never для navigationItem (примечание: prefersLargeTitles должно быть false в противном случае это не будет работать)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .never
    

Примечание : если prefersLargeTitles равен true, то largeTitleDisplayMode = .never не будет работать. Небольшое отображение заголовка для панели навигации зависит от prefersLargeTitles

Это включит режим большого заголовка, если его значение равно true

self.navigationController?.navigationBar.prefersLargeTitles = true
3
Krunal

это очень просто.

В вашем DetailView вы должны установить navigationItem.largeTitleDisplayMode to .never  

(не navigationController? .navigationItem.largeTitleDisplayMode !!)

navigationItem.largeTitleDisplayMode = .never
2
Alexander Spirichev
    if #available(iOS 11.0, *) {
        self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
    } else {
        // Fallback on earlier versions
    }
0
A Tyshka

Следует отметить, что если вы установите для largeTitleDisplayMode значение никогда, а для prefersLargeTitles значение false для детали ViewController, небольшой заголовок будет отображаться в течение секунды при переходе от детализации ViewController к предыдущей ViewController с помощью кнопки возврата UINavigationBar

Используйте функцию willMove(toParent:), чтобы изменить заголовок назад до выполнения перехода.

Swift 4

override func willMove(toParent parent: UIViewController?) {
    navigationItem.largeTitleDisplayMode = .always
    navigationController?.navigationBar.prefersLargeTitles = true
}
0
Aaron