UITabBarController与UINavigationController有些类似又有些区别,因此最好通过两个控制器的对比来了解其结构。
从共同点看
- 它们都是通过一个childViewControllers数组来存储子控制器以强引用它们,然后把它们对应的View显示到屏幕上
- UINavigationController有一个NavigationBar始终显示在最前面,
UITabBarController也有一个tabBar始终显示在最前面
从不同点看
显示子控制器的View
- UINavigationController只有在需要显示某个控制器的View的时候才会加载该View并且把原本显示的View移除(这里只是移除View,但是控制器并没有移除)
- UITabBarController则是在一开始显示的时候就把所有的View都加载进内存,需要显示某个View的时候就直接拿过来,原本的View也不会被移除
导航条和标签栏
- 导航条的y值是从20开始的, 但内部有一个UIImageView子控件超过导航条高度,因此看到的是64高度,此外 导航条底部还有一个子控件 -> 一根线(一张阴影图片)
- 一个导航控制器只有一个NavigationBar也就是所有的子控制器共用同一个导航条,导航条显示的内容和栈顶控制器有关,所以导航条上显示的内容由栈顶控制器控制
- 标签栏的高度为49,它的子控件除了与子控制器相对应的UITabBarButton按钮还有 背景UIImageView和分割线UIVIew
- 在子控制器中是无法拿到TabBar的,只能拿到UItabBarItem 来设置