iOS UITabBar在显示和隐藏的过程中层级变化

UITabBar在显示和隐藏的过程中层级是变化的 。在推出控制器隐藏tabBar的时候,tabBar 是从UITabBarController的view上先移除然后加在一个临时创建的view上,然后实现从又到左的抽屉动画,动画结束并且延时几百毫秒后在加在UITabBarController的view上。退回一级页面也是一样的道理,先加在临时view上,然后从左到右动画结束 在延迟几百毫秒然后再加载在UITabBarController的view上。

 

下面先建一个工程,tabBarController上有 vc1 和 vc2 。 然后vc1上有个按键 推出vc3 然后再返回vc1 看tabBar的父视图的变化。

vc1 代码如下:

iOS UITabBar在显示和隐藏的过程中层级变化

 

vc3 代码如下:

iOS UITabBar在显示和隐藏的过程中层级变化

 

查看log 信息:

iOS UITabBar在显示和隐藏的过程中层级变化

 

我们可以发现在推出控制器动作前后 tabBar的父视图确实发生了变化,并且它的父视图在vc3 viewdidappear 的时候x左边是负数,说明确实在左边在完成动画,而在vc3 viewdidappear 延迟1秒的log下  tabBar的父视图又回到了tabbarController 上。

总结: 苹果为了实现隐藏和出现tabBar的动画 而临时创建了一个view 用于实现动画,并且承载着tabBar 。动画结束再重新放置tabBar。 所以在这个时期在tabBarController的view上添加的view的层级肯定不是最上层(因为tabBar 在动画结束后最后加载回来)。 了解底层实现,希望对大家有所帮助。