对于iOS开发者来说,底部的tabBar通常都是需要自定义,因为系统自带的或多或少和我们要求的总有一点的出入。
在自定义tabBar后,通常做法就是移除系统的tabBar来防止出现重影的问题。
在iPhoneX之前我们通常都是在导航中使用这样的方法来移除系统的tabBar的
iPhoneX之前移除系统的tabBar方法或者
视图即将出现时进行删除
效果呢如何,自然是不用多少。因为这是在iPhoneX之前最常用的消除系统系统tabBar的方法。
但是!在iPhoneX之后,我们在适配的时候,如果还是加上这段代码的话,在进入初始界面的时候,并没有发现什么问题。如图:
初始进入视图的时候
我们根据视图会发现并没有什么问题,如果点击按钮什么的进入下一级界面后,再次返回界面就会出现重影问题。如图:
在进入二级界面后再次返回后的视图
这时候问题出现了。我们明明在导航中删除了,为什么会在二级界面返回的时候仍会出现这样的问题?是这段代码没有起作用吗?显然不是的,因为我们在初次进入视图的时候,是没有出现重影的,但是在返回的时候,出现了重影。
解决方法:
第一种:直接在系统的tabBar中进行更改,这种方法是一个朋友介绍的,目前还没有尝试过,但是能用。
第二种:在自定义的TabBarController中。添加删除系统tabBar的代码。具体如下:
删除系统的tabBar
这样就完美解决了iOS 11,在返回时候tabb出现重影的问题。
原理:在iOS 11中,系统的控件(似乎是)只能隐藏,不能删除,再返回的时候,系统会自动判断,添加已删除的系统控件。(具体的真实性有待研究)。
这两者的代码区别是,前者我们只删除一次,后者是在前者基础上再删除一次,以防出现的时候不能删除,在viewWillAppear中删除只是保证删除一次。所以要进行多次删除。
这样多次删除会不会把本来不存在的删除会出现空指针访问错误?
不会的。因为我们是遍历他的子控件,发现有才去删除,所以并不会删除不存在的东西。
至此,重影问题完美解决。