之前技术群有人提出过这样的问题,但我写demo并没有复现。后来项目出现了同样的问题,iOS 12 上表现正常。现象如下图
经过反复测试发现这个问题出现的条件是:
1、页面1的颜色差别较大
2、导航栏 isTranslucent = true
3、底部标签栏 isTranslucent = true
4、push的时候 hidesBottomBarWhenPushed = true
5、页面2 导航栏没有隐藏(这是废话),页面1 导航栏是否隐藏不重要
解决方法:
1、self.tabBar.isTranslucent = false
2、navigationController?.navigationBar.isTranslucent = false
3、hidesBottomBarWhenPushed = false
这三种解决方法限制比较大,算是一种解决思路吧,比如标签栏透明不重要的话就可以使用方法1
4、navigationController?.navigationBar.setBackgroundImage(UIColor.white.withAlphaComponent(0.8).toUIImage(), for: .default)
5、自定义导航栏
6、使用三方库解决,例如 YPNavigationBarTransition、KMNavigationBarTransition、RTRootNavigationController、QMUI等
KMNavigationBarTransition使用过程中发现有两个问题,我在GitHub上提了issues:
1、navigationController?.navigationBar.shadowImage 设置异常失效?有应对的方法
2、navigationBar.isTranslucent = true,页面背景色不同时跳转,会有闪烁?效果不如系统本身的效果,暂时没有应对方法