8

我正在努力获得一个 iPhone 应用程序,该应用程序几乎需要导航控制器堆栈中的每次推送或弹出来改变方向。

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

我在这里接受了各种建议......
如何在没有设备自动旋转的情况下检测 iPhone 上的旋转?
强制纵向将新视图推送到 UINavigationViewController
是否有记录的方法来设置 iPhone 方向?
但没有完全成功。

设置链接到 3.1.2 我对上面链接文章的阅读似乎表明,如果我的纵向视图使用

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

如果我将控制器弹出回我的纵向视图(具有适当的 shouldAutoRotate...),那么它将保持在损坏的横向视图中,直到设备返回纵向。

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

这种方法的问题在于,当您没有状态栏时,状态栏转换会很奇怪而且很难看——每次更改都会在页面上隐约出现阴影。

所以。我错过了什么。

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

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

3) 未记录的 API 调用是否可行(请不要!)

4

1 回答 1

4

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

如果您想在显示特定视图时更改方向,您应该[UIApplication setStatusBarOrientation:animated:]在您的[UIViewController viewWillAppear:]override 方法中为每个强制特定方向的视图控制器调用。当视图被推入堆栈以及从堆栈中弹出时,这将导致更改。确保调用super覆盖方法。

如果您正在这样做,这也是更改状态栏显示方式的正确位置。

于 2010-04-22T15:00:40.073 回答