我有一个iPad标签栏应用程序,使用基本标签栏模板创建。我添加了一些自定义视图控制器(每个选项卡一个,每个都有相应的NIB)以及一些带有NIB的额外视图控制器,可用作模态视图。在旋转设备之前,一切都很顺利。
我的应用只支持纵向方向,所以我在所有视图控制器中都有这个:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIDeviceOrientationLandscapeLeft) &&
(interfaceOrientation != UIDeviceOrientationLandscapeRight);
}
然而,当翻转时,应用程序不会在模拟器或设备中旋转。我检查了所有视图控制器都有上面的代码。
我查看了所有的NIB,并检查了他们都勾选了“轮换子视图”。除了在标签视图中显示它们所需的基本内容之外,我还没有更改默认设置中的任何NIB设置。
我尝试将所有视图控制器中的代码更改为:
- (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
{
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
没有任何区别。我已经完全确定所有视图控制器中都使用了相同的方法。我不知道还能做些什么。我看不出为什么它不应该旋转到倒置视图。
非常感谢任何帮助。
答案 0 :(得分:1)
知道了!我的一个视图控制器没有连接到IB中的相关选项卡。由于我还没有添加图像或为该视图控制器编写代码,我没有注意到它在IB中没有关联。我已经完成了shouldAutorotateToInterfaceOrientation方法,但似乎在IB中建立连接之前没有生效。
非常感谢您对此提出的建议。这是一个非常令人沮丧的问题,现在处理了!
答案 1 :(得分:1)
此外,这是Apple的非常有用指南:http://developer.apple.com/library/ios/#qa/qa1688/_index.html
在我的情况下 - 我忘了调用self = [super initWithNibName ....]!
答案 2 :(得分:0)
“所有视图控制器”是否包含标签栏控制器?
在标签栏应用中,根本就是shouldAutoRotateToInterfaceOrientation
被调用和评估的唯一视图控制器。
答案 3 :(得分:0)
您拥有的第一个代码段在逻辑上是不正确的:
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
return (orientation != UIDeviceOrientationLandscapeLeft) &&
(orientation != UIDeviceOrientationLandscapeRight);
}
此处,orientation
是UIInterfaceOrientation
的实例,而UIDeviceOrientationLandscapeLeft
是UIDeviceOrientation
的实例。两者的类型不同,因此不应进行比较。
相反,您应该使用UIInterfaceOrientation
选项:
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeLeft,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeRight
} UIInterfaceOrientation;
将方法更改为
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
return (orientation == UIInterfaceOrientationLandscapeLeft ||
orientation == UIInterfaceOrientationLandscapeRight);
}
(在肯定而非否定时,代码对我来说更具可读性)