繁体   English   中英

在iPhone上强制UIInterfaceOrientation更改

[英]Forcing UIInterfaceOrientation changes on iPhone

我正在努力获得一个iPhone应用程序,该程序几乎需要在Nav Controller Stack中进行每次推入或弹出操作来更改方向。

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

我一直在这里通过各种建议...。
在设备不自动旋转的情况下,如何检测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(或更早版本)中AutorotateToInterfaceOrientation应该仅通过推动控制器即可提供所需的方向是错误的?

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

3)是未公开的API调用方式(请不要!)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM