代码之家  ›  专栏  ›  技术社区  ›  Andiih

在iPhone上强制uiInterfaceOrientation更改

  •  8
  • Andiih  · 技术社区  · 15 年前

    我正苦恼于要买一个iPhone应用程序,它只需要在导航控制器堆栈中每按一次或弹出一次就可以改变方向。

    基本上,第一个视图是肖像,第二个景观是第三个肖像(是的,我知道这不太理想,但这就是设计,我必须实现它)。

    我在这里接受过各种各样的建议……
    How do I detect a rotation on the iPhone without the device autorotating?
    Force portrait orientation on pushing new view to UINavigationViewController
    Is there a documented way to set the iPhone orientation?
    但没有完全成功。

    设置为根据3.1.2链接我对以上链接文章的阅读似乎表明,如果我的肖像视图推动视图

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations
        return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight) );
    }
    
    然后,该视图应显示为旋转到横向。发生的是它以“破碎”的肖像形式出现,然后随着设备的转动而正确地旋转。

    如果我将控制器弹出到我的纵向视图(它有一个适当的shouldAtotate…)中,那么它将保持在断开的横向视图中,直到设备返回纵向。

    我还尝试删除所有shouldAuto消息,而不是通过转换视图强制旋转。这类工作,我通过移动状态栏(它实际上隐藏在我的应用程序中)发现了这一点。 [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; 如果需要,键盘将以正确的方向出现。

    这种方法的问题在于,当您没有状态栏时,状态栏转换是奇怪和丑陋的——随着每次更改,页面上都会出现阴影。

    所以。我错过了什么。

    1)我是否错误地认为,在3.1.2(或更早的版本)中,应该只通过推动控制器来实现所需的方向?

    2)还有其他方法可以让键盘以正确的方向显示吗?

    3)未记录的API调用方式是否正确(请不要!)

    1 回复  |  直到 15 年前
        1
  •  4
  •   Tony    15 年前

    你不应该使用 [UIViewController shouldAutorotateToInterfaceOrientation:] 触发一个方向改变;它只是让系统知道是否允许自动旋转。您仍然应该更新它来指定允许的方向。

    如果要在显示特定视图时更改方向,应调用 [UIApplication setStatusBarOrientation:animated:] 在你的 [UIViewController viewWillAppear:] 覆盖强制特定方向的每个视图控制器的方法。当视图被推到堆栈上并弹出时,这将导致更改。一定要打电话 super 在重写方法中。

    这也是更改状态栏显示方式的正确位置(如果您正在执行此操作)。