在 iOS 8 之前,我们结合使用以下代码支持的接口方向 and 应该自动旋转委托方法强制应用程序定向到任何特定方向。我使用下面的代码片段以编程方式将应用程序旋转到所需的方向。首先,我正在更改状态栏方向。然后,只需呈现并立即关闭模态视图即可将视图旋转到所需的方向。
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
但这在 iOS 8 中失败了。另外,我在堆栈溢出中看到了一些答案,人们建议我们从 iOS 8 开始应该始终避免这种方法。
更具体地说,我的应用程序是通用类型的应用程序。总共有三个控制器。
第一个视图控制器- 它应该支持 iPad 中的所有方向,并且在 iPhone 中仅支持纵向(主页按钮按下)。
第二个视图控制器- 它应该在所有条件下仅支持景观
第三视图控制器- 它应该在所有条件下仅支持景观
我们使用导航控制器进行页面导航。从第一个视图控制器中,通过单击按钮操作,我们将第二个视图控制器推入堆栈。因此,当第二个视图控制器到达时,无论设备方向如何,应用程序都应该仅锁定横向。
下面是我的shouldAutorotate
and supportedInterfaceOrientations
第二和第三视图控制器中的方法。
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeRight;
}
-(BOOL)shouldAutorotate {
return NO;
}
是否有任何解决方案或任何更好的方法将视图控制器锁定在 iOS 8 的特定方向。请帮忙!
对于 iOS 7 - 10:
Objective-C:
[[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeLeft) forKey:@"orientation"];
[UINavigationController attemptRotationToDeviceOrientation];
Swift 3:
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
只需调用它即可- viewDidAppear:
所呈现的视图控制器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)