iOS 自定义Push Pop动画 导航栏隐藏的问题

碰到一个需要自定义转场动画的需求,所以就自己来写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的

图1
图2
图3

解决:最后我在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
    }
}

我还不清楚其中的原理,如果有知道的大佬欢迎留言

你可能感兴趣的:(iOS 自定义Push Pop动画 导航栏隐藏的问题)