我有一个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也被颠倒了,而且,它不再可点击了。
如下图所示:
任何人都知道如何处理这种情况?或者,如何使标签栏不与视图控制器绑定,还能够顺利处理界面的旋转?
答案 0 :(得分:1)
您正在以非预期的方式使用标签栏。您似乎使用UITabBarView作为其他视图的不受控制的元素。这不是它的功能。
UITabBarView应该由UITabBarController直接控制,UITabBarController又应该控制tabbar中显示的视图的所有视图控制器,即tabbar控制器是一种控制子控制器的导航控制器。
假设您有三个选项卡,第三个是导航控制器。您的控制器层次结构如下所示:
TabbarController:
-->tab1ViewController
-->tab2ViewController
-->tab3ViewController(UINavigationController):
-->rootViewController-->secondViewController
您正在尝试移动和管理标签栏视图,而不使用其控制器和正确的控制器层次结构。那不行。