我正在努力获取iPhone应用程序,该应用程序几乎需要NAV控制器堆栈中的每一个推动或弹出才能更改方向。

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

我在这里经过各种建议。
如何在不自动启动的情况下检测iPhone上的旋转?
将新视图推向Uinavigation ViewController时强制肖像方向
有没有记录的设置iPhone方向的方法?
但是没有完全成功。

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight) );
}
然后,该视图应旋转到景观。发生的事情是它以“破碎”肖像形式出现,然后在设备转动时正确旋转。

如果我将控制器弹出回到我的肖像视图(具有适当的应变...),那么该视图一直保持在破碎的景观视图中,直到将设备返回到肖像方向为止。

我还尝试删除所有应变的消息,而是通过转换视图来强制旋转。这种作品,我已经弄清楚通过移动状态栏(实际上隐藏在我的应用程序中) [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; 需要时,键盘将以正确的方向出现。

这种方法的问题在于,当您没有状态栏时,状态栏转换是怪异而丑陋的 - 每次更改都在页面上隐约可见。

所以。我想念什么。

1)我认为在3.1.2(或可能更早)中,应该通过推动控制器来提供所需的方向?

2)是否有另一种方法可以使键盘出现在正确的方向上。

3)是无证件的API呼叫(请不要!)

有帮助吗?

解决方案

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

如果您想在显示特定视图时更改方向,则应致电 [UIApplication setStatusBarOrientation:animated:] 你内心 [UIViewController viewWillAppear:] 为每个迫使特定方向的视图控制器的覆盖方法。当将视图推到堆栈上以及将其从堆栈中推出时,这将导致更改。确保您打电话 super 在您的覆盖方法中。

如果您正在做的话,这也是改变状态栏的显示方式的正确场所。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top