美文网首页
iOS 自定义Push Pop动画 导航栏隐藏的问题

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

作者: J0hnnyWong | 来源:发表于2020-08-07 18:27 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/jzhqdktx.html