【问题标题】:iOS autorotate is not working when you have different orientation screens当您有不同的方向屏幕时,iOS 自动旋转不起作用
【发布时间】:2018-08-13 03:20:36
【问题描述】:

我正在开发一个用 Objective-C 编写的应用程序。我有更多屏幕,所有屏幕都是横向左和横向右方向,这些屏幕不能处于纵向模式。但是我有 3 个不同的屏幕,它们应该只处于纵向模式,不能处于横向左侧或横向右侧。

这是所有屏幕横向模式的代码-

这是我的应用程序的纵向模式

这些都是我在视图控制器和应用程序 Plist 中所做的一切,我添加了所需的方向,例如 This Info.plist

并且应用设备的方向会自动改变。像这样 - .

我很确定一切都很清楚,应该可以按预期工作,但由于某种原因,当我使用应用程序并锁定自动旋转并运行应用程序时,它会自动以纵向模式打开,当我解锁自动旋转时,它会处于横向并且您旋转它将旋转到纵向模式。我使用 shouldAutorate 返回 YES 因为它应该在横向左侧和横向右侧之间自动旋转它所以我也使用它纵向模式屏幕以纵向打开但当用户旋转设备时它会自动旋转。

任何帮助将不胜感激,请分享任何想法,为什么我的应用程序无法按预期运行。

【问题讨论】:

  • 我建议您正确地构建应用程序容器类并利用它,而不是遍历您的应用程序并为每个视图控制器指定旋转信息。请参阅此post。希望它能给你一些想法。

标签: ios objective-c device uiinterfaceorientation shouldautorotate


【解决方案1】:

以下是解决此问题的步骤:

  1. 从 plist 中删除方向,因为它会覆盖视图控制器中的任何逻辑。

  2. 在你有横向方向的地方保留下面的代码:

    -(BOOL)shouldAutorotate {
        return YES;
    }
    
    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
    }
    
  3. 纵向模式使用如下:

    -(BOOL)shouldAutorotate {
        return YES;
    }
    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    } 
    

现在尝试锁定您的第一个视图控制器将以横向显示的方向,而另一个将是纵向的,无论方向锁定如何。

【讨论】:

  • 我也尝试过这种方式,但它仍然和以前一样。我改变了 shouldAutorotate 返回 NO 没有改变相同的结果。顺便说一句,您认为还有什么可能导致此问题的原因是感谢您的回答。
  • 请确保从您的 plist 中删除方向并从 shouldAutoRotate 返回 Yes。
  • 同时取消选择部署信息部分中的所有方向。
  • 根据我在信息中检查的内容,它会自动显示在 plist 中,我从 plist 中删除它并自动从部署信息中删除。
  • 检查这个测试项目,你就会明白它是如何工作的:dropbox.com/sh/gmej63de21smxsf/AAB2ziw47VrVe2_14j1uEop1a?dl=0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
相关资源
最近更新 更多