UITabBarController與UINavigationController有些類似又有些區(qū)別矾芙,因此最好通過兩個控制器的對比來了解其結構。
從共同點看
- 它們都是通過一個childViewControllers數(shù)組來存儲子控制器以強引用它們近上,然后把它們對應的View顯示到屏幕上
- UINavigationController有一個NavigationBar始終顯示在最前面剔宪,
UITabBarController也有一個tabBar始終顯示在最前面
從不同點看
顯示子控制器的View
- UINavigationController只有在需要顯示某個控制器的View的時候才會加載該View并且把原本顯示的View移除(這里只是移除View,但是控制器并沒有移除)
- UITabBarController則是在一開始顯示的時候就把所有的View都加載進內(nèi)存壹无,需要顯示某個View的時候就直接拿過來葱绒,原本的View也不會被移除
導航條和標簽欄
- 導航條的y值是從20開始的, 但內(nèi)部有一個UIImageView子控件超過導航條高度,因此看到的是64高度斗锭,此外 導航條底部還有一個子控件 -> 一根線(一張陰影圖片)
- 一個導航控制器只有一個NavigationBar也就是所有的子控制器共用同一個導航條地淀,導航條顯示的內(nèi)容和棧頂控制器有關,所以導航條上顯示的內(nèi)容由棧頂控制器控制
- 標簽欄的高度為49,它的子控件除了與子控制器相對應的UITabBarButton按鈕還有 背景UIImageView和分割線UIVIew
- 在子控制器中是無法拿到TabBar的,只能拿到UItabBarItem 來設置