Título grande para pequeno título mudar na barra de navegação não é bom iOS 13, pegajosa

11

Eu tenho um UINavigationControllercom o valor padrão dele navigationBar.prefersLargeTitles = true.

Estou mudando isso para falsequando push entrar em uma nova cena, vamos chamá-lo ( DetailsViewController), alterando-o para viewWillDisappear.

override func viewWillDisappear(_ animated: Bool) {
   super.viewWillDisappear(animated)
   navigationController?.navigationBar.prefersLargeTitles = false
}

Agora DetailsViewControllerestou usando willMove(to parent:).

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

Para voltar para títulos grandes.

Observe os instantâneos anexados de como o iOS 13 faz isso com o iOS 12 , considerando que o iOS 12 é o comportamento correto.

iOS 13 :

iOS 13

iOS 12 :

iOS 12

Mohmmad S
fonte
Você não precisa mudar .prefersLargeTitlesnada ao empurrar um controlador de exibição de detalhes para a pilha de navegação, ele usará automaticamente um título pequeno e depois voltará para o grande quando voltar ao controlador de exibição raiz, tanto quanto eu sei
Henrik-dmg
@ henrik-dmg Não tenho certeza se era assim antes, mas nem tudo vai para um grande título, se eu fiz isso, tentei isso.
Mohmmad S
11
largeTitleDisplayModepara . automatice você deve obter a transição desejada.
Harry J
@HarryJ where?
Mohmmad S
Dentro do seu viewDidLoad ou controlador de navegação,navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Respostas:

21

O que você está fazendo estava sempre errado. Você deve definir prefersLargeTitlesa trueuma vez para a barra de navegação e nunca tocá-la novamente.

A maneira de alterar o que cada controlador de exibição faz sobre títulos grandes, como parece, é que esse controlador de exibição define seu próprio navigationItem(no seu viewDidLoad) para ter o desejado largeTitleDisplayMode. Então, se o primeiro vc tem .alwayse o segundo tem .nevertudo será suave.

mate
fonte
Uma resposta tão boa! Nunca soube que era a maneira de ter títulos grandes e pequenos ao mesmo tempo!
Kacper Cz 17/01
0

Eu tive o mesmo problema e tive que colocar um NavigationItem no segundo storyboard do ViewController. Meu NavigationItem estava sendo criado automaticamente pelas segue e o seu prefersLargeTitleno viewDidLoad()não foi criado antes da exibição. A adição de um NavigationItem ao storyboard corrigiu esse problema e permitiu que eu o configurasse prefersLargeTitleno menu de propriedades do storyboard.

Ben Hardin
fonte
0

No meu caso, esse problema estava ocorrendo durante uma passagem para um controlador de exibição que é filho de um UITabBarController. A configuração largeTitleDisplayModeno controlador de exibição filho não foi suficiente para corrigir esse bug.

Resolvi o problema adicionando um item de navegação à cena UITabBarController e definindo largeTitleDisplayModecomo .neverlá.

Teo
fonte