我使用tabBar Controller作为根控制器。它有4个选项卡,每个ViewControllers都有
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return YES;
}
以及tabBarController本身。 但是当我旋转设备(真实或模拟器)时,屏幕随机转动!如果在我打开应用程序时它没有转动它将具有相同的行为,直到我退出应用程序。 我试图在IB中逐个添加4个viewControllers,看看是否有问题,但我得到了同样的问题。只有在根本没有标签时它才会转动!
如果您有任何想法,请告诉我。谢谢!
答案 0 :(得分:1)
您可以将每个视图控制器设置为响应任何可能的方向。因此,每个视图都会尝试旋转到每个方向。
视图不会真正自动旋转。除了最简单的视图外,您通常必须以编程方式管理子视图的位置。
如果您没有自定义方向代码,您可能会看到视图尝试在横向框架中绘制纵向视图,反之亦然。如果您设置了autoresize subviews
,则子视图将以看似随机的模式显示在屏幕上。您更改方向越多,放置就越随机。
对于复杂视图,我喜欢为每个方向创建单独的viewController / view对。然后我将视图放在导航控制器中。随着方向的改变,每个视图控制器将推动或弹出适当的视图控制器,以便将进入的方向放入/移出堆栈。对于用户来说,这看起来像是一个优雅地重绘自己的视图。 (如果您具有必须通过变换手动旋转的非标准UI元素,则此功能特别有用)
答案 1 :(得分:0)
您必须继承UITabBarController
并实施shouldAutorotateToInterfaceOrientation:
答案 2 :(得分:0)
实际上,我只想让我的第一个标签视图控制器旋转。所以我把这个代码放在我的自定义tabBarController:
中- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (self.selectedIndex == 0) {
return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}else {
return toInterfaceOrientation == UIInterfaceOrientationPortrait;
}
}
但我遇到了同样的问题。当转向横向时,我为我的第一个标签视图控制器使用自定义方向代码。在我的自定义tabBarcontroller中使用以下函数调用:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
//rotation to Portrait
lastOrientation = toInterfaceOrientation;
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[self.selectedViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
if (!UIInterfaceOrientationIsLandscape(lastOrientation)) {
//rotation to Landscape
[self.selectedViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
lastOrientation = toInterfaceOrientation;
}
}
答案 3 :(得分:0)
我发现如果以编程方式设置选定的选项卡,tabViewController会不规则地旋转。