在iOS8之前,我们结合使用下面的代码和supportedInterfaceOrientationsshouldAutoRotate委托方法来强制应用程序定位到任何特定方向.我使用下面的代码片段以编程方式将应用程序旋转到所需的方向.首先,我正在更改状态栏的方向.然后,只需显示并立即取消模式视图,即可将视图旋转到所需的方向.

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];

但这在iOS8中失败了.另外,我在堆栈溢出中看到了一些答案,人们建议我们从iOS8开始应该始终避免使用这种方法.

更具体地说,我的应用程序是一种通用类型的应用程序.总共有三个控制器.

  1. First View controller-它应该支持iPad中的所有方向,而iPhone中只支持纵向(按下主页按钮).

  2. Second View controller-它在任何情况下都应该只支持横向权限

  3. Third View controller-在所有条件下,它只支持景观

我们正在使用导航控制器进行页面导航.在第一个视图控制器上,点击一个按钮,我们在堆栈上按下第二个.因此,当第二个视图控制器到达时,无论设备方向如何,应用程序都应该只锁定在右侧.

下面是我在第二个和第三个视图控制器中的shouldAutorotatesupportedInterfaceOrientations方法.

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscapeRight;
}

-(BOOL)shouldAutorotate {
    return NO;
}

有没有什么更好的方法来锁定iOS8的特定方向的视图控制器.请帮帮忙!!

推荐答案

对于iOS 7-10:

目标-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:中调用它即可.

Ios相关问答推荐

在许多UIButton中对齐文本,即使SF Symbols(或其他图像)具有不同的宽度?

设置托管在DigitalOcean上的iOS通用链接

在SwiftUI中插入绘制重复形状

IOS:在UI线程中执行代码的闭包样式的替代

如何使用自定义数据源在本地react 本机 ios 应用程序中加载 Tradingview 小部件?

当应用程序被杀死时是否还能获取位置?

SwiftUI:.toolbar 不适用于 UITextView

快速 keys 串更新只有在第二次try 时才起作用

比较 `某个协议` 实例时出现编译错误

PropertyWrapper 不存在的 Codable 属性的默认值

从视图模型中更新 EnvironmentObject

在向我的 struct 添加属性后获取线程 10:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

分析应用程序版本时出错 - Apple 提交到store

滑动以返回特定的 SwiftUI 视图

将flutter android项目导入iOS

在 UICollectionView 上从右到左对齐

iOS 10 / Xcode 8 设备上的 NSLog 似乎被截断了?为什么?

Xcode 8:函数类型不能有参数标签 destruct 我的构建

使用 Swift 在一个 ViewController 中强制横向模式

Xcode中的终端窗口?