1

我正在尝试定义 shouldAutorrotate 方法,但我不知道在哪里定义它,因为它从未被调用过。我有一个 UITabBarController,在我的项目中有三个选项卡(每个选项卡都有一个根导航控制器)。我的目标是在某些特定情况下禁用自动旋转。

谢谢!

4

3 回答 3

2

好的,解决了。我做了什么:在我最顶层的导航控制器中,我定义了

-(BOOL)shouldAutorotate {return [self.visibleViewController shouldAutorotate];}

然后,在我的下一个 viewController

-(BOOL)shouldAutorotate {return NO;}

多谢你们!!!

于 2013-03-15T09:09:52.533 回答
1

你可以在文件中写这个方法viewcontroller.m,你想禁用自动旋转这是iOS 6的代码:

#ifdef IOS_NEWER_OR_EQUAL_TO_6
-(BOOL)shouldAutorotate
{
   return NO;
}
#endif
于 2013-03-15T08:39:36.110 回答
0

阅读iOS 6.0 发行说明

iOS 6 中的自动旋转正在发生变化。在 iOS 6 中,不推荐使用 UIViewController 的 shouldAutorotateToInterfaceOrientation: 方法。取而代之的是,您应该使用 supportedInterfaceOrientationsForWindow: 和 shouldAutorotate 方法。

更多的责任正在转移到应用程序和应用程序委托身上。现在,iOS 容器(例如 UINavigationController)不会咨询它们的子容器来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置为 iPad 惯用语的 UIInterfaceOrientationMaskAll 和 iPhone 惯用语的 UIInterfaceOrientationMaskAllButUpsideDown 。

视图控制器支持的界面方向会随着时间而改变——甚至应用程序支持的界面方向也会随着时间而改变。每当设备旋转或视图控制器以全屏模式呈现样式呈现时,系统都会向最顶层的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器从其 shouldAutorotate 方法返回 YES 时,才会检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由 Info.plist 文件或应用委托的 application:supportedInterfaceOrientationsForWindow: 方法确定)相交以确定是否旋转。

系统通过将应用程序的supportedInterfaceOrientationsForWindow: 方法返回的值与最顶部全屏控制器的supportedInterfaceOrientations 方法返回的值相交来确定是否支持方向。

setStatusBarOrientation:animated: 方法并未完全弃用。它现在仅在最顶层全屏视图控制器的 supportedInterfaceOrientations 方法返回 0 时才有效。这使调用者负责确保状态栏方向一致。

所以我会首先尝试在应用程序委托中实现该行为。如果这对您的用例来说太粗糙了,我会尝试为各个内容视图控制器实现-shouldAutorotate(注意单个!)方法。r如果这不起作用(参见上面的引用),请在您的容器控制器中实现此方法,即。标签栏控制器或导航控制器。

另请参阅 WWDC 2012 Session #236,iOS 上视图控制器的演变

于 2013-03-15T08:42:35.480 回答