iOS 方向在特定屏幕上支持横向和纵向 - 不是所有屏幕

Posted

技术标签:

【中文标题】iOS 方向在特定屏幕上支持横向和纵向 - 不是所有屏幕【英文标题】:iOS Orientation Support both Landscape and Portrait on specific screen - NOT ALL Screens 【发布时间】:2014-03-31 16:26:47 【问题描述】:

同志们,

我只是想知道,如何仅在特定屏幕上启用横向方向?到目前为止,我在常规设置中选择了横向左右选项,并在 plist 文件中为设备方向启用了支持的界面方向 (iPhone),但这会影响所有屏幕。

我的应用程序中有近 80 个屏幕,我需要同时支持大约 5 个屏幕的纵向和横向,其余屏幕应仅以纵向模式显示。

非常感谢任何帮助!

谢谢, 拉梅什

【问题讨论】:

允许所有方向,然后仅在您想要的方向上强制纵向...参见***.com/questions/18988163/… 您想为每个屏幕添加它以强制纵向吗?换句话说,你想让我写在 75 个屏幕上以强制只显示纵向? 嗨,我正在一个框架上构建这个应用程序。我们的框架扩展了 UIViewController,我们扩展了 FramewworkUIViewController 类来设计屏幕。我向 FrameworkUIViewCONtroller 添加了一个类别并添加了supportedInterfaceOrientation 以仅将其锁定为纵向模式,但这不起作用:(... 【参考方案1】:

在常规设置(仅调整您的 plist)中,您需要选择所有可能支持的方向。然后,您需要在特定的视图控制器中限制它们。如果您使用的是 NavBar 或 TabBar 控制器,则需要在此处添加限制。

来自 UIViewController 文档:

ios 6 及更高版本中,您的应用支持在应用的 Info.plist 文件中定义的界面方向。视图控制器可以覆盖supportedInterfaceOrientations 方法来限制支持的方向列表。通常,系统仅在窗口的根视图控制器或呈现为填满整个屏幕的视图控制器上调用此方法;子视图控制器使用其父视图控制器为它们提供的窗口部分,不再直接参与有关支持哪些旋转的决策。应用程序的方向掩码和视图控制器的方向掩码的交集用于确定视图控制器可以旋转到哪些方向。

为了简单起见,我在 UINavigationController 上创建了一个类别,它查看最顶层的视图控制器以确定它的旋转能力。这样,在需要旋转的特定视图控制器中,我可以覆盖这些相同的方法并添加横向支持。

@implementation UINavigationController (AutoRotation)

- (NSUInteger)supportedInterfaceOrientations

    return [self.topViewController supportedInterfaceOrientations];


- (BOOL)shouldAutorotate

    return [self.topViewController shouldAutorotate];


@end

【讨论】:

对不起,你想在所有的 View Controller 中添加这两个方法吗? 嗨,我正在一个框架上构建这个应用程序。我们的框架扩展了 UIViewController,我们扩展了 FramewworkUIViewController 类来设计屏幕。我向 FrameworkUIViewCONtroller 添加了一个类别并添加了supportedInterfaceOrientation 以仅将其锁定为纵向模式,但这不起作用:(... 我不记得我到底做了什么,但是在我的关键视图控制器中(比如父视图控制器,我将 shouldAutorotate 设置为 false。然后在子视图控制器中,我想要我将 shouldAutoRotate 设置为 true。然后您还可以将 supportedInterfaceOrientations 添加到子 viewController 以准确指定要支持的旋转。 您是否将 FrameworkUIViewController 加载到导航或选项卡控制器中?如果是这样,该类别必须在 UINavigationController/UITabBarController 上(如上面的示例),然后 shouldAutoRotate 声明出现在为屏幕提供内容的特定视图控制器中。作为一个控制器,UINavigationController 有它自己的旋转规则,所以通过添加类别并将旋转细节放入一个普通的视图控制器中,导航控制器从它最顶层的孩子那里得到它的旋转规则。【参考方案2】:

您的屏幕是否在UINavigationController 内?如果是这样,我注意到并非所有 viewController 都可以决定它们支持的方向。

【讨论】:

以上是关于iOS 方向在特定屏幕上支持横向和纵向 - 不是所有屏幕的主要内容,如果未能解决你的问题,请参考以下文章

纵向模式下的动画UIView在ios上横向不一致

iOS App:窗口旋转总是纵向而不是横向

支持iPhone 6和iPhone 6+,具有不同的启动/启动屏幕图像,适用于iPad纵向和横向方向

支持 iPhone 6 和 iPhone 6+,针对 iPad 纵向和横向方向具有不同的启动/启动屏幕图像

ios:在webview上允许横向

iOS 应用程序初始屏幕方向不适用于横向