Judul besar untuk beralih judul kecil di bilah navigasi tidak mulus iOS 13, lengket

11

Saya punya UINavigationControllerdengan nilai default-nya navigationBar.prefersLargeTitles = true.

Saya beralih ke falseketika saya push menjadi adegan baru sebut saja ( DetailsViewController), dengan mengubahnya menjadi viewWillDisappear.

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

Sekarang DetailsViewControllersaya menggunakan willMove(to parent:).

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

Untuk beralih kembali ke judul besar.

Perhatikan snapshot terlampir tentang bagaimana iOS 13 melakukannya dengan bagaimana iOS 12 melakukannya, mengingat iOS 12 adalah perilaku yang benar.

iOS 13 :

iOS 13

iOS 12 :

iOS 12

Mohmmad S
sumber
Anda tidak perlu mengubah .prefersLargeTitlessama sekali ketika mendorong controller tampilan detail ke tumpukan navigasi, itu akan secara otomatis menggunakan judul kecil dan kemudian kembali ke yang besar setelah Anda kembali ke controller tampilan root, sejauh yang saya tahu
henrik-dmg
@ henrik-dmg Saya tidak yakin apakah itu seperti itu sebelumnya, tetapi tidak lagi semuanya berjalan ke judul besar jika saya melakukannya, saya sudah mencobanya.
Mohmmad S
1
largeTitleDisplayModeuntuk. automaticdan Anda harus mendapatkan transisi yang diinginkan.
Harry J
@ Harry di mana?
Mohmmad S
Dalam viewDidLoad atau pengontrol navigasi Anda,navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Jawaban:

21

Apa yang Anda lakukan selalu salah. Anda harus menetapkan prefersLargeTitlesuntuk truesekali untuk bar navigasi dan tidak pernah menyentuh lagi.

Cara untuk mengubah apa yang dilakukan oleh setiap pengontrol tampilan tentang judul besar seperti yang terlihat adalah bahwa pengontrol tampilan menetapkan sendiri navigationItem(di dalamnya viewDidLoad) untuk memiliki yang diinginkan largeTitleDisplayMode. Jadi, jika yang pertama vc .alwaysdan yang kedua memiliki .neversemuanya akan lancar.

matt
sumber
Jawaban yang bagus! Tidak pernah tahu bahwa itu adalah cara untuk memiliki gelar besar dan kecil secara bersamaan!
Kacper Cz
0

Saya memiliki masalah yang sama dan harus meletakkan NavigationItem di storyboard ViewController kedua. NavigationItem saya sedang dibuat secara otomatis oleh segue dan prefersLargeTitledi dalamnya viewDidLoad()belum selesai dibuat sebelum tampilan muncul. Menambahkan NavigationItem ke storyboard memperbaiki masalah ini dan memungkinkan saya untuk mengatur prefersLargeTitlemenu properti di storyboard.

Ben Hardin
sumber
0

Dalam kasus saya masalah ini terjadi selama segue ke view controller yang merupakan anak dari a UITabBarController. Pengaturan largeTitleDisplayModepada pengontrol tampilan anak tidak cukup untuk memperbaiki bug ini.

Saya telah memecahkan masalah ini dengan menambahkan item navigasi untuk adegan UITabBarController dan pengaturan largeTitleDisplayModesebagai .neverada.

Teo
sumber