导航栏Push视图控制器时出现异常动画的解决咨询
我之前也碰到过一模一样的坑!这种异常动画通常是因为导航栏处于半透明状态时,push过渡过程中系统会透出下层未被完全覆盖的区域(比如window的默认背景、下层VC未设置背景的区域),导致视觉上出现闪屏或者奇怪的颜色跳变。给你几个亲测有效的方案,都不需要关闭navigationBar.translucent:
给应用Window设置明确的背景色
很多人会忽略window的默认背景,它可能不是你想要的白色,当导航栏半透明时,push动画就会透出这个底色。在AppDelegate或SceneDelegate里添加这行代码:// Swift window?.backgroundColor = .whiteObjective-C版本:
// Objective-C self.window.backgroundColor = [UIColor whiteColor];确保所有ViewController的View都设置了背景色
检查你要push的ViewController(包括当前的VC1和目标VC2),它们的view.backgroundColor是否都明确设置为白色(或你需要的颜色)。如果某个VC的view没有设置背景,push时就会透出下层内容,导致动画异常。比如在VC2的viewDidLoad里添加:view.backgroundColor = .white给导航栏设置半透明的自定义背景
如果上面的方法还没解决,可以给导航栏设置一个带透明度的白色背景,既保留半透明的视觉效果,又避免透出下层奇怪的颜色:// Swift let navBarAppearance = UINavigationBarAppearance() navBarAppearance.backgroundColor = UIColor.white.withAlphaComponent(0.95) // 透明度可按需调整 navigationController?.navigationBar.standardAppearance = navBarAppearance navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance检查是否存在未覆盖的底层视图
有时候项目里可能有一些全局的底层视图(比如自定义的状态栏背景、全局提示视图)没有被正确隐藏或覆盖,push时会被导航栏半透效果带出来,排查一下这类视图的层级和显示状态。
这些方法都能在保留导航栏半透明的前提下解决异常动画问题,我当时是给window设置背景色就搞定了,你可以挨个试试!
内容的提问来源于stack exchange,提问作者oolionoo

