Closed MoLice closed 6 years ago
当开启了 customNavigationBarTransition 功能后,在 UINavigationController (NavigationBarTransition)
里会在 vc 被 pop 的时候将一条 transitionNavigationBar
添加到 vc.view
上,因此触发 vc 的 viewDidLayoutSubviews
。而由于 vc 被 pop 了,此时在 viewDidLayoutSubviews
里获取到的 self.navigationController
为 nil,导致 self.qmui_navigationBarMaxYInViewCoordinator
的值为 0,从而表现出布局上的错误跳动。
我们尝试通过某些方式避免将 transitionNavigationBar 添加到 vc.view 上时触发的那一次 viewDidLayoutSubviews
,但目前仍未找到理想的方法,因此暂时兼容
qmui_navigationBarMaxYInViewCoordinator
方法,令其在获取不到 navigationBar
时试图拿 transitionNavigationBar
来代替,这样能解决目前的问题。但那一次多余的 viewDidLayoutSubviews
依然是多余的,并且也存在其他风险,例如你自己访问 self.navigationController.navigationBar.frame
(而不是通过 QMUI 的 qmui_navigationBarMaxYInViewCoordinator
方法),也会出现相同的问题。
待优化。
这个问题将会在 3.2.0 优化,以后使用时没有这种烦恼了
请填写运行环境
模拟器
iOS 11.2
9.2
2.2.2
请描述具体问题
viewDidLayoutSubviews
方法里布局的时候使用self.qmui_navigationBarMaxYInViewCoordinator
获取导航栏的位置并相对它布局。QMUINavigationControllerDelegate
里优化 push/pop 时的 navigationBar 效果的相关方法,例如shouldCustomNavigationBarTransitionWhenPopDisappearing
。相关截图