Swift自带滑动返回功能,界面跳转时顶部导航栏的处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/I123456789T/article/details/88898022

1、使用苹果手机的朋友应该都知道,在使用App的时候,如果要返回前一个界面,一般可以使用手指从屏幕左边缘开始向右一滑,就可以返回前一个界面,这也是返回时ios自带的返回动画,这里就简单介绍一下实现方式:

2、首先在正在显示的视图控制器的类名上需要实现 这两个协议:UIGestureRecognizerDelegate ,UINavigationControllerDelegate

     接着设置返回的代理:
        self.navigationController?.interactivePopGestureRecognizer?.delegate = self

    在前一个界面吊机跳转的地方通过

self.navigationController?.pushViewController(要跳转的视图控制器的实例, animated: true)

就可以实现了

不过有时候我们还需要在顶部导航上加一个返回的图片按钮,在点击的时候实现和滑动返回同样的功能,也很简单,在设置返回的点击事件时,这样写:

     self.navigationController?.popViewController(animated: true)

有时我发现在点击返回或者滑动返回时无法响应,就是返回不了,我有遇到过,不过我是用这种方式处理的,加一个方法协议中的函数即可:

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        if (gestureRecognizer == self.navigationController?.interactivePopGestureRecognizer) {
            //只有二级以及以下的页面允许手势返回
            return self.navigationController!.viewControllers.count > 1
        }
        return true
}

3、在新手写布局界面的时候,有时候遇到前一个页面和后一个页面在跳转的时候,前一个页面的顶部导航栏会影响后一个顶部导航栏,虽然我在后一个界面设置了新的导航栏样式或者颜色,但是我在滑动返回时,返回了一般但是我又不想返回了,又回到后一个页面时,这时会发现,当前的顶部导航栏已经被前一个页面的顶部导航栏影响了,颜色可能变成前一个导航栏的样式了,其实这个也好解决,就是需要知道视图控制器的生命周期即可实现,

   解决办法:我们知道视图控制器有好几个生命周期,其中一个生命周期是 视图将要显示出现的时候(viewWillAppear(_ animated: Bool)) 这个重写的函数,我就可以处理了,我们只需要把我们要初始化的导航栏样式全部写在这个生命周期函数中,就可以解决这个问题了,

注:我是ios的新手,都是自学swift的,如果有大神请路过,切勿喷我们新手菜鸟!如果好的意见或者建议可以指点更好!

猜你喜欢

转载自blog.csdn.net/I123456789T/article/details/88898022