美文网首页
【iOS】ViewController侧滑右拉返回失效的问题

【iOS】ViewController侧滑右拉返回失效的问题

作者: 拔丝豌豆 | 来源:发表于2019-08-29 11:55 被阅读0次

页面导航条的二级页面返回按钮设置为自定义按钮后,侧拉返回事件就会失效。

在导航控制器的rootVC添加如下代码可解决:

loadView或者viewdidLoad中添加:

        self.navigationController?.interactivePopGestureRecognizer?.delegate = nil

viewDidAppear 和 viewWillDisappear 也需要作如下调整

    override func viewDidAppear(_animated:Bool) {

        super.viewDidAppear(animated)

        self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false

    }

    override func viewWillDisappear(_animated:Bool) {

        super.viewWillDisappear(animated)

        self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true

    }


问题思路:

开始我只是isEnabled开启侧拉手势,二级页面自定义返回按钮后的侧拉返回顺利解决。

但是返回到了rootVC中,如果继续右拉返回,问题就出现了。

系统直接闪退!!!

看了下问题,是栈到了最前方,再拉就没VC了,可手势还在响应,于是一个红色的警告跳到了屏幕上,栈溢出了。。。

草泥马啊,这是苹果的问题吧。

emmmmmmmmmmmmmmmmmm............................................

那该怎么解决rootVC继续侧拉时闪退的问题呢?

既然侧拉手势能开启,那关闭也可以吧?

于是我在rootVC 的 viewWillAppear 中关闭,viewWillDisappear开启

测试了一下,开启后再关闭确实解决了问题。

侧拉返回时崩溃的问题解决了。重新打包给测试,但还是反馈有侧拉失效的问题!!!

复现操作:进入二级页面,侧拉返回到一半,取消侧拉,再回到二级页面。再次侧拉时,失效了。。。。。。。。。

那到底什么时候关闭呢?什么时候再开启呢?

梳理一下逻辑:

1、即将离开首页时:viewWillDisappear

2、已经离开首页时: viewDidDisappear

3、侧拉开始响应,即将进入首页时: viewWillAppear

4、侧拉结束已经进入首页时:viewDidAppear

1和2,3和4都是隔了一个动画的时间,点击按钮触发push或返回是隔了动画的时间,侧拉返回是隔了从手指拖动到动画完成的时间。

在进入页面后和即将离开页面时操作rootVC是最安全的,所以,即将离开时开启侧滑,已经进入页面后关闭侧滑,就有了开头的解决方案代码⬆️。

相关文章

网友评论

      本文标题:【iOS】ViewController侧滑右拉返回失效的问题

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