导航栏中的从大标题到小标题的切换并不流畅iOS 13


11

我的UINavigationController默认值为navigationBar.prefersLargeTitles = true

我将其切换为false当我push 进入新场景时DetailsViewController,通过将其更改为来调用它()viewWillDisappear

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

现在DetailsViewController我正在使用willMove(to parent:)

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

过渡回大标题。

考虑到iOS 12是正确的行为,请观察所附的快照,了解iOS 13的运行方式和iOS 12的运行方式。

iOS 13

iOS 13

iOS 12

iOS 12


.prefersLargeTitles据我所知,将明细视图控制器推入导航堆栈时无需进行任何更改,它会自动使用一个小标题,一旦返回到根视图控制器,便会使用一个大标题。
henrik-dmg

@ henrik-dmg我不确定之前是否是这样,但是如果我这样做了,现在不再一切都变成大标题了,我已经尝试过了。
Mohmmad S,

1
largeTitleDisplayMode至 。automatic并且您应该获得所需的过渡。
哈里J

@HarryJ在哪里?
Mohmmad S,

在您的viewDidLoad或导航控制器中,navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Answers:


21

你在做什么总是错的。您应该将导航栏设置prefersLargeTitlestrue一次,再也不要触摸它。

更改每个视图控制器对大标题所做的操作的方法是,该视图控制器将自己的navigationItem(设置为viewDidLoad)设置为具有所需标题largeTitleDisplayMode。因此,如果第一个vc具有.always第二个vc ,那么.never一切都会很顺利。


这么好的答案!从来不知道这是同时拥有大大小小的标题的方式!
Kacper Cz

0

我遇到了同样的问题,不得不将NavigationItem放在第二个ViewController的故事板上。我的NavigationItem是由segue自动创建的,并且prefersLargeTitleviewDidLoad()视图出现之前尚未完成创建。在情节提要中添加NavigationItem可以解决此问题,并允许我prefersLargeTitle在情节提要的属性菜单中进行设置。


0

在我的情况下,这个问题是在对视图控制器(它是的子级)的搜索过程中发生的UITabBarControllerlargeTitleDisplayMode在子视图控制器上进行设置不足以解决此错误。

我通过将导航项添加到UITabBarController场景并largeTitleDisplayMode.never那里设置来解决了该问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.