Closed MoLice closed 3 years ago
Bug 原因:
如截图所示,当手势返回触发时,UINavigationController 会执行一次普通的 pop,于是会走到标注1的位置,此时 appearingViewController 也即前一个界面(标题白色)。
在标注2里,会将当前的 navigationBar 标题颜色按照 appearingViewController 的要求来渲染,标题颜色变为白色,只是目前尚处于手势动画过程中,这个颜色变化不会立马体现出来。
等到手势结束(不管是成功返回,还是半途取消),就会走到标注3的 completion 里,QMUI 4.2.2 的代码里会重新应用一次 appearingViewController 的标题颜色,这在正常手势返回到前一个界面时是没问题的,因为手势结束后,可视的界面确实是 appearingViewController。
但当手势返回中途又取消时,可视界面会停留在旧界面,此时如果还应用 appearingViewController 的标题颜色,就会导致当前界面错误地显示了前一个界面的标题颜色。所以标注3的代码应该把 appearingViewController 换成 topViewController,也即最终真正可视的那个界面才正确。
Bug 表现
QMUINavigationControllerDelegate
提供titleViewTintColor
用于控制界面的顶部标题颜色,对系统原生的标题也生效。经测试,iOS 12 下,如果前后两个界面的标题颜色不同,在手势返回一半又取消后,当前界面的标题颜色错误地被前一个界面的标题颜色覆盖。正确的标题颜色:
手势返回取消后的标题颜色:
如何重现
录屏如下:
其他信息