在iOS 15上,当导航到具有透明导航条的视图控制器时,到透明栏的动画不像预期的那样工作。
但是,如果您使用透明导航栏导航回视图控制器,则动画将按预期工作。
这就是我如何设置视图控制器的方法:
rootVC
let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
appearance.backgroundColor = UIColor.red
self.navigationController?.navigationBar.standardAppearance = appearance
self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearancefirstVC
let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
self.navigationController?.navigationBar.standardAppearance = appearance
self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearancesecondVC
let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
appearance.backgroundColor = UIColor.yellow
self.navigationController?.navigationBar.standardAppearance = appearance
self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearance注意,在下面的示例中,从secondVC -> firstVC到rootVC -> firstVC的过渡是多么顺利。

示例项目:https://github.com/karlingen/NavigationTest
知道它为什么会这样吗?
发布于 2021-10-04 08:11:12
苹果公司给我的答复如下:
您应该使用每项定制获得更好的行为,即在视图控制器的UINavigationItem上设置这些属性,而不是在UINavigationBar本身上设置这些属性。这也使您摆脱了viewWillAppear:方法工作所需的严格时间--只要您的自定义在视图控制器被推送之前被应用,您就应该得到一个良好的转换。当使用每项自定义支持时,viewDidLoad通常是进行这些自定义的好地方。
因此,我们应该使用UINavigationItem代替。使用以下代码为我修复了它:
# firstVC.swift
override func viewDidLoad() {
let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
self.navigationItem.standardAppearance = appearance
self.navigationItem.scrollEdgeAppearance = appearance
}https://stackoverflow.com/questions/69378367
复制相似问题