当前位置: 首页>编程语言>正文

[iOS]全屏右滑时底部tabBar错位的一种解决方式

对于iPhone用户来说,右滑退出当前页面的手势是再常用不过的了。只不过对于系统原生来说,只有在左侧屏幕边缘才有这个手势,范围太小了,因此很多APP都做了自己的边缘滑动退出的手势,并且很多是全屏右滑退出的。但笔者最近在做这个手势的时候却出现了些问题(其实是项目的遗留问题了)。话多说不,直接上图!

[iOS]全屏右滑时底部tabBar错位的一种解决方式,第1张
支付宝的右滑退出

支付宝和微信以及QQ等APP的右滑效果基本上都是这样的,可以看到滑动是很流畅的没有任何问题,下面再看看笔者接下的历史遗留问题(严肃脸.jpg)。

[iOS]全屏右滑时底部tabBar错位的一种解决方式,第2张
底部tabBar错位的右滑退出

额。。。说实话,确实是有点挫。笔者也很奇怪,按道理来说右滑退出手势无非就是拦截一下系统的边缘手势,然后对手势进行替换,代码可以说是挺少的。网上也是一堆写好的代码,直接在工程中运行应该是没问题的,但是,为什么会出现这个问题呢?

笔者试着比对了其他博主的代码,并没有发现什么不同。也有下载他们的框架demo,发现他们很多好像只是简单的一个控制器跳转到另一个控制器,然后再利用右滑退出,并没有这种tabBarController为window根控制器的案例(难道他们项目框架都不用UITabBarController的吗?)。笔者还在一些博主的该话题文章下进行了询问,得到的是“系统bug”。。。很绝望啊,系统bug?不应该吧。。。

好吧,还是没找到解决办法。。。不过在与一个同为开发的朋友交流后突然有了个疑问:会不会是视图层级方面的问题呢?因为从第二个图中可以看出,底部的tabBar好像是悬浮在最上面的,但是,支付宝的却是在下面的。为什么这样呢?好吧,还是不知道。。。不过,在无意间问了下朋友他的项目是怎样搭建的时候突然好像找到了可以一试的解决方法。

笔者的项目是比较常见的搭建方式,window的根控制器是一个UITabBarController(简称为A),有五个控制器a1,a2,a3,a4,a5,分别包装为导航控制器,再作为子控制器被A添加。但是朋友说,他的项目中window的根控制器是一个导航控制器Nav,Nav初始化的时候将A设为它的根控制器。a1,a2,a3,a4,a5直接作为A的子控制器添加不再包装成导航控制器。嗯,确实不一样,然后我就试了下,Duang。。。。

[iOS]全屏右滑时底部tabBar错位的一种解决方式,第3张
修改结构后的右滑退出

嗯,完美解决。讲道理,解决了历史遗留问题的感觉真的是爽,哈哈。

这个全屏右滑底部tabBar错位的问题算是解决了吧,只是笔者这里还有几个问题:
1 为什么直接将A设为window的根控制器会有这个问题呢?这两者有什么区别呢?
2 支付宝的右滑和底部的视图也是有联动效果的,但是笔者的没有,这个是怎么做到的呢?
3 支付宝等只是靠近屏幕左侧的一块区域才有这个右滑手势,并不是严格的全屏右滑,这个又是怎么做的呢?判断手势开始时的位置吗?


https://www.xamrdz.com/lan/5vp2016729.html

相关文章: