锁定方向的 ViewController
Posted
技术标签:
【中文标题】锁定方向的 ViewController【英文标题】:ViewController with locked orientation 【发布时间】:2015-10-26 13:55:15 【问题描述】:我遇到以下情况:
ViewController A 应该锁定在横向(左侧或右侧)。 VC A 的设置如下:
-(UIInterfaceOrientationMask)supportedInterfaceOrientations
return UIInterfaceOrientationMaskLandscape;
-(BOOL)shouldAutorotate
return NO;
ViewController B 应该锁定在纵向上。它的设置如下:
-(UIInterfaceOrientationMask)supportedInterfaceOrientations
return UIInterfaceOrientationMaskPortrait;
-(BOOL)shouldAutorotate
return NO;
没有导航控制器或标签栏。它只是一个普通的视图控制器,然后按下按钮我从 ViewController A 转到 ViewController B
[self performSegueWithIdentifier:@"ViewControllerB" sender:self];
到目前为止一切都很好。但是当我关闭 ViewController B 时,ViewController A 会出现在纵向上。这就是我解雇 VC B 的方式:
[self dismissViewControllerAnimated:YES completion:nil];
另一个问题是:当我在 ViewController B 上并且在纵向上没问题时,然后我开始快速将我的设备从纵向旋转到横向几次,并且尽管有上述方向规则,但它在某个点旋转到横向。有什么我遗漏的吗?
【问题讨论】:
【参考方案1】:在viewDidAppear:
尝试使用此方法旋转到您想要的方向,以防控制器负载时方向错误:
NSNumber *value = @(UIInterfaceOrientationLandscapeRight); // Or whatever else orientation you need.
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
还像这样重新定义您的 shouldAutorotate
方法:
- (BOOL)shouldAutorotate
// Change the YES or NO order depending on your viewController.
return [UIDevice currentDevice].orientation == UIDeviceOrientationPortrait ? YES : NO;
并且也实现这个方法:
- (NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskPortrait; // Or whatever orientation you need in this viewController.
【讨论】:
感谢您的回复。起初它似乎工作 - 当我去 B 然后返回 A 时,它确实在 A 上强制执行横向。但是,我第二次这样做时问题再次发生 - A 在纵向上出现错误。这似乎是一种模式,一次有效,下一次无效。我确定有解释,但我找不到。以上是关于锁定方向的 ViewController的主要内容,如果未能解决你的问题,请参考以下文章