iPhone的UITabBar作为应用程序窗口的一部分;旋转设备时出现问题

时间:2011-03-05 13:02:17

标签: iphone cocoa-touch uinavigationcontroller uitabbar device-orientation

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

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

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

所以,我将UITabBar添加到MainWindow.xib,并将其绑定到app delegate的变量。在我的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的能力。

我在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也被颠倒了,而且,它不再可点击了。

如下图所示:

Tab bar upside down

任何人都知道如何处理这种情况?或者,如何使标签栏不与视图控制器绑定,还能够顺利处理界面的旋转?

1 个答案:

答案 0 :(得分:1)

您正在以非预期的方式使用标签栏。您似乎使用UITabBarView作为其他视图的不受控制的元素。这不是它的功能。

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

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

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

您正在尝试移动和管理标签栏视图,而不使用其控制器和正确的控制器层次结构。那不行。