iOS 13 - 推送时的 Buggy 大标题 UINavigationBar

Posted

技术标签:

【中文标题】iOS 13 - 推送时的 Buggy 大标题 UINavigationBar【英文标题】:iOS 13 - Buggy Large Title UINavigationBar while pushing 【发布时间】:2019-10-04 10:10:52 【问题描述】:

随着 ios 13 的更新,当我在 UINavigationBar 上有 prefersLargeTitles = true 并执行推送转场时,我仍然无法解决这个恼人的错误。 另外,即使我不能 100% 确定它是否与它相关,我的视图控制器也嵌入了一个集合视图。

无论如何,我所说的错误/故障如下:

基本上,当我推动时,文本不会像我预期的那样动画,它会继续停留在那里,直到出现新屏幕。有小费吗?谢谢

【问题讨论】:

我认为standardAppearance、compactAppearance和scrollEdgeAppearance的新设置会对你有所帮助。 我已经在使用它们了:/ 但也许我错过了一些东西......然后我会深入码头,谢谢提示 遇到同样的问题。后退导航(pop)动画效果很好。 推送的视图控制器是否也显示大标题?您是否将其largeTitleDisplayMode 设置为never 是...推送的视图控制器(Detail)没有大标题,即使在DetailViewController中将largeTitleDisplayMode设置为never,我也没有得到任何改进 【参考方案1】:

我有同样的问题。尝试将navigationItem.largeTitleDisplayMode 设置为.always 用于您的第一个VC,然后将.never 设置为您的第二个VC prefersLargeTitles = trueboth 情况下。

原因写自Apple Doc:

如果导航栏的prefersLargeTitles属性为false,则该属性无效,导航项的标题始终显示为小标题。

这是导致动画故障的原因,它不仅仅是 iOS13 的错误,在 iOS12/11 上已经是这种情况,只是反过来(从 secondVC 解散回 firstVC 时会发生动画故障)。

我写了一篇文章对此进行了更多解释: https://www.morningswiftui.com/blog/fix-large-title-animation-on-ios13

【讨论】:

【参考方案2】:

尝试在viewWillAppear() 方法中设置largeTitleDisplayMode 参数。

对于基础 VC,将其设置为 .always,在目标 VC 中将其设置为 .never

BASE VC

override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        navigationItem.largeTitleDisplayMode = .always



DESTINATION VC

 override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        navigationItem.largeTitleDisplayMode = .never
 

【讨论】:

以上是关于iOS 13 - 推送时的 Buggy 大标题 UINavigationBar的主要内容,如果未能解决你的问题,请参考以下文章

IOS 7.1 中的 UISegmentedControl Buggy Tint 颜色

在后台处理应用程序时的 iOS 推送通知

iOS UICollectionView 推送刷新时的意外行为

收到推送通知时 iOS 13 崩溃?

iOS 13 在后台没有收到 VoIP 推送通知

ios 13 推送通知设备令牌