【问题标题】:iPhone (iOS 5) forcing portrait from landscape and going backiPhone(iOS 5)从横向强制纵向并返回
【发布时间】:2013-04-02 11:28:22
【问题描述】:

我正在开发适用于 iOS 5 的应用程序,并且我有一个需要在纵向视图中推送的控制器。从风景中以纵向模式推动控制器非常棘手,但最后我想出了如何做到这一点。我通过presentModalViewController 或pushViewController 显示控制器,并在控制器内部覆盖preferredInterfaceOrientationForPresentation 方法。

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

它工作正常,只是它有一个问题。下面是场景。

  1. 用户在横向模式下握住设备,当前控制器在横向模式下正确显示
  2. 用户进行一些操作,然后出现仅纵向控制器(作为模态控制器并处于纵向模式)
  3. 用户关闭模态控制器
  4. 以前在横向工作的控制器现在是纵向的,但用户仍然以横向方式握住他的设备 ---> 这就是问题

我试图通过调用[UIViewController attemptRotationToDeviceOrientation] 来修复它,但它没有帮助。

提前感谢您的帮助。

【问题讨论】:

    标签: iphone objective-c cocoa-touch ios5 landscape-portrait


    【解决方案1】:

    您的说法是使用 IOS 5,但 preferredInterfaceOrientationForPresentation() 方法仅适用于 IOS 6 及更高版本。

    要解决您的问题(在 ios5 中),您需要像这样覆盖 shouldAutorotateToInterfaceOrientation() 方法...

    在目标视图控制器中(您在纵向模式下需要的视图控制器)就像这样......

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return UIInterfaceOrientationIsPortrait(interfaceOrientation);
    }
    

    更新:

    在当前视图控制器中(横向模式下需要的视图控制器)像这样......

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return UIInterfaceOrientationIsLandscape(interfaceOrientation);
    }
    

    【讨论】:

    • 感谢您的回答 Bhanu,我已经看过几次了,但它从来没有帮助我强制某些控制器处于不同的界面方向...
    • 更新了答案检查一下。 @迈克尔
    【解决方案2】:

    我希望你得到一个更好的、有效的解决方案我做了一件讨厌的事情来开始工作。我的问题是我需要支持从 4.3 到 6.0。一些 pushModal 功能发生了根本性的变化,被弃用等等,在轮换方面也有变化。

    我写了一个 RoatatingViewController 并添加到了根目录。我根据需要添加了推送模式和 pushviewconcollers。 当我需要弹出时,我会进行检查:如果堆栈上所需的组件处于所需的方向而不是好的方向,则没有变化。否则:弹出风景并推送肖像实例并将风景数据复制到肖像。

    这不太好,内存效率不高,但在所有 iOS 版本上都可以正常工作而不会崩溃。祝你好运!

    【讨论】:

    • 感谢您的回答,我尝试了您的解决方案,但它对我不起作用,也许我弄错了。你能解释一下什么时候弹出横向控制器并推送纵向控制器吗?
    • 我所做的是,在模态控制器的 viewWillDisappear 中,我弹出应该处于横向状态的控制器并再次推送它。这是对的还是我理解错了?
    • @Michal 这不仅仅是两行代码......还有几个类。还需要注册通知以获取设备方向更改通知,这也取决于操作系统版本。很抱歉看到它对您没有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多