【问题标题】:How to force a screen orientation in specific view controllers?如何在特定视图控制器中强制屏幕方向?
【发布时间】:2023-03-30 09:36:01
【问题描述】:

我的应用程序非常简单:它以一个视图控制器开始,该控制器包含一个带有几个选项的表视图(在分组视图布局中)。当用户点击其中一个选项时,我将另一个视图控制器推送到我的导航控制器上。

第二个视图控制器仅显示一个 UIImageView,用户可以在此视图控制器上在纵向/横向模式之间更改屏幕方向。这很好用,一切都很开心。

但是,如果用户在横向模式下点击导航栏上的“返回”按钮,第一个控制器的布局就会完全混乱。之前/之后的屏幕截图见下文:


(来源:pessoal.org

(来源:pessoal.org

关于如何强制第一个视图控制器(本文中的第二个屏幕截图)保持纵向屏幕方向的任何线索?

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:

    有一个解决方案:使用视图控制器并将其视图添加到窗口中。然后在该控制器中,您在 shouldAutorotate... 方法中强制景观。它工作正常,但请确保您的项目有必要使用它,因为强迫用户转动他的 iPhone 并不是很聪明。顺便说一下,如果您需要,这里有一个示例代码。

    http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

    【讨论】:

      【解决方案2】:

      就像有人在公开雷达上建议的那样,一种解决方法是在非纵向时禁用“后退”按钮:

      - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
          // don't let user press "back" button in landscape - otherwise previous view and the rest of the application
          // will also be in landscape which we did not feel like testing yet
          self.navigationController.navigationBarHidden = (UIInterfaceOrientationPortrait != self.interfaceOrientation);
      }
      

      【讨论】:

        【解决方案3】:

        似乎没有办法使用记录在案的方法来做到这一点。

        我为此提交了一个错误:rdar://6399924

        “没有办法总是将 UIViewController 限制在一个方向”

        您可以在开放式雷达上看到它(以及重现问题的示例代码链接):http://openradar.appspot.com/radar?id=697

        【讨论】:

        • 这个答案来自 2008 年。现在你有解决方案 here 我曾经锁定方向。
        • 与 Stack Overflow 一样,如果您有比已接受的解决方案更好/更新的解决方案,请适当发布,以便我们更新已接受的答案。
        【解决方案4】:

        我无法让它按照我想要的方式工作。您应该能够为 ViewController 设置特定的方向,但 NavigationController 似乎并不总是做正确的事情。

        我最终重新设计了我的屏幕,以便它们都可以在任一方向上工作。这可能是额外的工作,但无论如何它“感觉”更自然。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-27
          • 1970-01-01
          • 2013-01-13
          相关资源
          最近更新 更多