6

当用户完成观看视频(它允许以横向模式查看)时,我使用此代码强制将方向更改回纵向,然后将视频视图控制器从导航控制器中弹出:

//set statusbar to the desired rotation position
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationPortrait animated:NO];

//present/dismiss viewcontroller in order to activate rotating.
UIViewController *mVC = [[[UIViewController alloc] init] autorelease];
[self presentModalViewController:mVC animated:NO];
[self dismissModalViewControllerAnimated:NO];

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

这工作完美,直到iOS 5.1.1。在另一篇文章中读到现在应该使用这些方法后,我什至尝试使用新的呈现/解雇方法:

[self presentViewController:mVC animated:NO completion:NULL];
[self dismissViewControllerAnimated:NO completion:NULL];

问题是它根本不起作用。在我将视频查看器旋转到横向然后弹出它之后,我的设置视图(表格视图控制器)又回来了,但也处于横向模式。

我什至尝试过这里的提示

“该setStatusBarOrientation:animated:方法并未完全弃用。但它现在仅supportedInterfaceOrientations在最顶层全屏视图控制器的方法返回 0 时才有效。这将确保状态栏方向一致的责任交到调用者手中。”

所以我尝试设置一个标志来强制supportedInterfaceOrientationsreturn 0在调用上面的第一个代码块之前),但它也不起作用。

有人对此有解决方案吗?感谢您的时间和精力。

4

3 回答 3

17

setStatusBarOrientation方法改变了一些行为。根据苹果文档:

setStatusBarOrientation:animated: 方法并未完全弃用。它现在仅在最顶层全屏视图控制器的 supportedInterfaceOrientations 方法返回 0 时才有效

于 2012-09-26T19:52:08.390 回答
2

您的根视图控制器应该对该方法回答错误shouldAutorotate,以便您的应用程序响应setStatusBarOrientation:animated

来自 Apple 文档:“但是,如果您的应用程序具有可旋转的窗口内容,则不应使用此方法任意设置状态栏方向”

要理解这一点,在shouldAutorotate方法中放置一个断点,你会看到它在设置状态栏方向后被称为 juste。

于 2012-09-25T15:17:27.017 回答
0

这是我修复的方法。

https://stackoverflow.com/a/14530123/1901733

当前问题与上述网址中的问题相关联。

statusBarOrientation 在 ios6 中是一个真正的问题。

于 2013-01-25T20:53:41.780 回答