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

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

Ответ 1

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

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

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

navigationItem.largeTitleDisplayMode = .never

Ответ 2

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

  1. set предпочитаетLargeTitles для false для вашего navigationBar

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

    self.navigationController?.navigationItem.largeTitleDisplayMode = .never
    

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

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

self.navigationController?.navigationBar.prefersLargeTitles = true

Ответ 3

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

Мой прецедент:

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
} 

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

Ответ 4

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

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

Swift 4

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

Ответ 5

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

Ответ 6

Это может быть очень поздно, но это может быть полезно для кого-то..

включите приведенный ниже код в свой подробный контроллер представления под viewDidLoad

navigationItem.largeTitleDisplayMode = .never

Ответ 7

Версия SwiftUI

.navigationBarTitle("Title", displayMode: .inline)