碰到一个需要自定义转场动画的需求,所以就自己来写push pop动画,因为功力不到位所以碰到了一个自己感觉很奇怪的问题。
问题是这样的:
自定义了push和pop的转场动画之后,写了两个vc,vc1(图1)和vc2(图2),使用自定义转场由vc1 push到vc2,在vc2中我不希望展示导航栏,所以在vc2的viewWillAppear中将导航栏隐藏掉了 navigationController?.setNavigationBarHidden(true, animated: true)
在vc2 pop出去的时候将导航栏再显示出来 navigationController?.setNavigationBarHidden(false, animated: true)
这个时候出现问题了,vc1的导航栏出现是出现了,但是整个view被顶上去了,如图3,一般来说这种情况在iOS7之后导航栏有透明度的时候都会这样,但是此时导航栏的translucent被我设置了false,应该不会遮挡住view的
解决:最后我在UINavigationControllerDelegate的类里面的navigationController 方法里面去修改导航栏的状态就一切正常了
public class NavigationControllerRaisingAnimationTransition: NSObject, UINavigationControllerDelegate {
let pushRaisingAnimation = PushRaisingAnimation()
let popRaisingAnimation = PopRaisingAnimation()
public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
if operation == .push {
navigationController.setNavigationBarHidden(true, animated: false)
return pushRaisingAnimation
} else if operation == .pop {
navigationController.setNavigationBarHidden(false, animated: false)
return popRaisingAnimation
}
return nil
}
}
我还不清楚其中的原理,如果有知道的大佬欢迎留言