我的应用中的所有视图控制器仅在纵向工作,除了可以是纵向或横向的视图控制器。
我有一些使用场景如下:
执行这些操作后,应用程序将保持横向状态,并且不会自动将其更改为纵向。
我使用supportedInterfaceOrientations控制视图控制器方向(我使用的是iOS 6.0)。我做错了什么?当用户按下后退按钮时应用程序自动将方向更改为允许时,如何才能获得正确的行为?谢谢你的回答!
答案 0 :(得分:2)
在iOS 6(可能更早)中,如果设备旋转时视图控制器在屏幕外,则不会收到任何通知。当它成为顶视图控制器时,它也不会被发送willAnimateRotationToInterfaceOrientation:duration:
。
您需要跟踪视图控制器的当前方向,并在viewWillAppear:
中检查设备方向。如果它们不同,您可以使用willAnimateRotationToInterfaceOrientation:duration:
进行正确设置。
由于您可能会做很多事情,因此您可能希望创建视图控制器继承的通用超类。
典型的解决方案是:
@implementation MyHandlesOffscreenRotationController
{
BOOL isShowingPortrait;
}
- (void) viewDidLoad
{
[super viewDidLoad];
isShowingPortrait = UIInterfaceOrientationIsPortrait(
[[UIApplication sharedApplication] statusBarOrientation]);
}
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
BOOL currIsPortrait = UIInterfaceOrientationIsPortrait(
[[UIApplication sharedApplication] statusBarOrientation]);
if ((isShowingPortrait && !currIsPortrait) ||
(!isShowingPortrait && currIsPortrait)) {
[self willAnimateRotationToInterfaceOrientation:
[[UIApplication sharedApplication] statusBarOrientation]
duration:0.0f];
}
}
@end
答案 1 :(得分:2)
iOS 9及以上
在pop时,只需在 viewWillAppear 方法中编写下面提到的代码。
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]forKey:@"orientation"];
这样,您的视图将以纵向模式显示。
答案 2 :(得分:1)
Just override -(BOOL)shouldAutoRotate and - (NSUInteger)supportedInterfaceOrientations
inside a UINavigationController
category, then ViewController will force rotate to its supported orientation after pop from other ViewController.
@implementation UINavigationController (Rotate)
- (BOOL)shouldAutorotate
{
return [self.topViewController shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
@end
答案 3 :(得分:0)
P.L。在这个主题中有一个很好的解决方案:显示并立即关闭一个空模态视图控制器,它只允许肖像|景观
How to change the device orientation programmatically in iOS 6