一. 背景
使用Xcode16
打包后,App
在暗夜模式下,切换Tabbar
的item
,会有一根白色线条闪过。

二. 分析
因为之前版本一直没有这个问题,是使用了Xcode16
打包后,然后在iOS18
系统上才会出现,一开始以为是UITabbar
顶部的分割线导致的,但查看代码UITabbar
顶部的分割线已经移除,查看图层,由于闪现也看不到任何东西。
因此通过代码逐步屏蔽并设置各个图层颜色为红色的的方式,逐步排查,最终确定了,这根白线是由UINavigationController
引起的,因此查阅资料了解到:
iOS18
引入了新的UITabBarController
切换动画(如缩放效果),可能在动画过程中短暂暴露底层视图(如UINavigationController
的根视图背景色)。若UINavigationController
的背景色与UITabBar
差异较大,则会出现"闪现"现象。
而我们项目设置的UINavigationController
的view
的背景颜色固定是白色,当处于暗夜模式的时候,也没有将UINavigationController
的view
的背景颜色改为黑色,因此导致了暗夜模式下,iOS18
系统上UITabbar
切换出现白色线闪现问题。
三. 治理
该问题的治理有两种方案:
方案一
- 在暗夜模式想将
UINavigationController
的view
的背景色也改为暗夜模式下的颜色,这样颜色一致,切换的时候,就不会出现白色线闪现问题。
方案二
- 如果禁用
UITabbar
点击的切换动画,来禁止掉iOS18
系统UITabBarController
的切换动画
ini// 方法1:包裹切换操作以禁用动画 UIView.performWithoutAnimation { tabBarController.selectedIndex = targetIndex }