0

我有一個iPhone應用程序使用導航控制器顯示頂部欄(帶標題和返回按鈕等)。iPhone的UITabBar作爲應用程序窗口的一部分;旋轉設備時出現問題

我在應用程序窗口中添加了一個UITabBar,它可以在它的各個部分之間切換。我沒有將標籤欄添加到每個ViewController的視圖中,而是將它添加到應用程序窗口中。 (當我在ViewController中使用它時,控制器之間的切換使標籤欄左右滑動,當發生動畫彈出/推動時,與整個視圖一起)。

因此,我將UITabBar添加到MainWindow.xib,並將其綁定到應用程序委託的變量。在我didFinishLaunchingWithOptions方法,我添加以下代碼:

[self.window addSubview:navigationController.view]; 

CGRect frame = navigationController.view.frame; 
frame.size.height -= tabbar.frame.size.height; 
navigationController.view.frame = frame; 
tabbar.selectedItem = [tabbar.items objectAtIndex:0]; 

來調整主(navigationController的)認爲,爲了使的TabBar可見。

當我旋轉設備時出現問題 - 我的視圖被拉伸到整個窗口,並且我失去了顯示TabBar的能力。

我添加了一個- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation方法到我的ViewController,用下面的代碼:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    CGRect frame = self.view.frame; 
    frame.size.height -= [AppState shared].tabBar.frame.size.height; 
    //frame.origin.y = [AppState shared].tabBar.frame.size.height; 
    //frame.origin.x = 100; 
    self.view.frame = frame;  
    frame = [AppState shared].tabBar.frame; 
    frame.origin.y = [UIScreen mainScreen].bounds.size.height - frame.origin.y - frame.size.height; 
    [AppState shared].tabBar.frame = frame; 
} 

它調整大小的視圖,並且移動標籤欄到視圖的上/下部分(I只允許縱向/肖像顛倒的方向在這裏)。問題是,我的TabBar也顛倒了,而且它不再是可點擊的。

它看起來像下面的圖片:

Tab bar upside down

任何人都知道如何處理這種情況?或者,如何使標籤欄不綁定到視圖控制器,還能夠順利處理界面的旋轉?

回答

1

您正以無意的方式使用tabbar。您似乎將UITabBarView用作其他視圖的不受控制的元素。這不是它的功能。

UITabBarView應由UITabBarController直接控制,而UITabBarController又應該控制所有視圖控制器以顯示在tabbar中的視圖,即tabbar控制器是一種控制子控制器的導航控制器。

假設您有三個選項卡,第三個選項卡是導航控制器。你控制器層次結構是這樣的:

TabbarController: 
    -->tab1ViewController 
    -->tab2ViewController 
    -->tab3ViewController(UINavigationController): 
      -->rootViewController-->secondViewController 

您正在嘗試沒有它的控制器和適當的控制器層次中移動和管理的TabBar視圖。這是行不通的。