【问题标题】:Eliminate Rotation Orientation in Objective-C在 Objective-C 中消除旋转方向
【发布时间】:2025-12-22 06:10:16
【问题描述】:

目前,在我的应用程序中,我不需要允许发生侧向,除了一个视图应该在用户侧向时显示另一个 uiview。假设我有 20 个 UIViewControllers 允许从 mainviewcontroller (UINavigationController) 访问。现在,还假设 UIViewController #7 在显示时有两个视图,一个显示为侧向,一个显示为纵向。 我不希望你们认为我想在应用程序的整个生命周期中消除 Rotation Orientation,而只是针对 19 个视图,并且最后一个 uiviewcontroller 支持它。

如果用户对那个视图进行了侧向定向,那么用户应该像往常一样看到应用程序,没有定向效果。

我希望用户只使用纵向视图,仅用于那个视图控制器。也许如果用户将手机旋转 180 度,上下颠倒,那么肯定,应用应该翻转但仍处于纵向视图中。

有人有什么想法吗?我正在部署到 iOS 6.1,所以我使用的一些方法已被弃用,这是我想要远离的......

比如这个方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return NO;
}

我做过几个测试用例:

- (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

- (BOOL) shouldAutorotate{
    return NO;
}

我还检查了与 * 相关的问题,但我无法简单地找到答案。

我认为这应该是我覆盖的一种可能两种方法,但我不能这样做.....如何消除 UIViewController 中的侧面方向????

【问题讨论】:

  • 只需设置应用属性即可锁定除一个方向以外的所有方向。它是应用属性第一个屏幕上的按钮。
  • 参考已编辑的问题
  • UIViewController 或 UIView 中有一个函数可以返回支持的方向,只需修改它(这个名字我现在不知道)
  • @bengoesboom : UIViewController 方法 supportedInterfaceOrientations
  • 如果你们注意到...我确实实现了方法supportedInterfaceOrientations...但我认为我没有正确使用它,因为应用程序仍然面向我试图消除的视图它为。

标签: iphone ios uiviewcontroller uinavigationcontroller uiinterfaceorientation


【解决方案1】:

有一些关于 SO 的问题涵盖了这个主题;例如here 的信息非常丰富。

或者,thisthis 怎么样?

IIRC,在我观看的关于这个主题的一个 WWDC 视频中,推荐的方法是进行模态演示,但如果你愿意,可以使用各种 hack。

编辑:

更多数据在这里:iOS6 Preferred Interface Orientation Not Working

在这里:In iOS6, trouble forcing ViewController to certain interfaceOrientation when pushed on stack

正如我所说,如果您想强制定向,我相信呈现视图控制器(模态或其他)是要走的路,请参阅this 解释。

【讨论】: