0

我有一个 iPhone 应用程序,它使用导航控制器来显示顶栏(带有标题和后退按钮,等等......)。

UITabBar在应用程序窗口中添加了一个,可以在它的各个部分之间切换。我没有将标签栏添加到 ViewController 的每个视图中,而是将标签栏添加到应用程序窗口中。

(当我在 ViewController 中使用它时,控制器之间的切换使标签栏向左/向右滑动,当动画弹出/推送发生时,以及整个视图)。

因此,我添加了UITabBarMainWindow.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's)视图的大小,以使 TabBar 可见。

当我旋转设备时,问题就出现了——我的视图被拉伸到全窗口并且我失去了显示 TabBar 的能力。

我在 ViewController 中添加了一个- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation方法,代码如下:

- (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;
}

它调整视图的大小,并将标签栏移动到视图的上/下部分(我在这里只允许纵向/纵向倒置方向)。问题是,我的 TabBar 也颠倒了,而且它不再可点击。

如下图所示:

标签栏倒置

有谁知道如何处理这种情况?或者,如何让标签栏不绑定到视图控制器,同时又能流畅地处理界面的旋转?

4

1 回答 1

1

您以无意的方式使用标签栏。您似乎将 UITabBarView 用作其他视图的不受控制的元素。那不是它的功能。

UITabBarView 应该由 UITabBarController 直接控制,而 UITabBarController 又应该控制标签栏中显示的视图的所有视图控制器,即标签栏控制器是一种控制子控制器的导航控制器。

假设您有三个选项卡,第三个是导航控制器。您的控制器层次结构如下所示:

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

您正在尝试在没有控制器和适当的控制器层次结构的情况下移动和管理选项卡视图。那是行不通的。

于 2011-03-05T14:54:08.643 回答