iOS 11设备方向自动旋转

时间:2017-09-22 19:51:20

标签: ios objective-c swift orientation ios11

对于 iOS 10 及以下,以下代码控制了任何相应UIViewController的方向。我在部署信息中选择了PortraitLandscape LeftLandscape Right,并在 Info.plist 中包含以下内容:

enter image description here

对于我的VC应该完全旋转我有以下代码,我说,之前的工作是 iOS 11

- (BOOL)shouldAutorotate {
    [super shouldAutorotate];
    return NO;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    [super supportedInterfaceOrientations];
    return UIInterfaceOrientationMaskPortrait;
}

我已经在实际设备上对此进行了测试,并且从 iOS 11 开始,它无效。

更奇怪的是,从 iOS 11 开始记录已注册的设备方向告诉我设备 IS 纵向...当控制器以横向模式加载时... < / p>

代码:

// In viewDidLoad 
NSLog(@"orientation: %lu", [[UIDevice currentDevice] orientation]);

控制台输出:

2017-09-22 15:20:26.225196-0400 <APP_NAME>[2669:1628408] orientation: 1

这可能是在构建和运行应用程序之前向左或向右旋转设备。

  • 此错误的原因是什么?如果有人知道请帮助..

仅供参考:不,我的设备没有旋转锁定..

1 个答案:

答案 0 :(得分:6)

这是否被证明是 iOS 11 错误,我似乎偶然发现了一个&#34;解决方案&#34;这个问题。无论出于何种原因,对于 iOS 11 ,将- (BOOL)shouldAutorotate返回更改为YES可以获得正确的方向...

Objc

- (BOOL)shouldAutorotate {

    [super shouldAutorotate];

    if (@available(iOS 11, *)) return YES;
    return NO;

}

在组合中,我必须手动检查屏幕尺寸,以查看宽度是大于还是小于屏幕的假设高度。

width = self.view.frame.size.width, height = self.view.frame.size.height;
if (height < width) width = height, height = self.view.frame.size.width;

希望其他人找到这个&#34; bug&#34;的真正原因。 OR Apple更新其捆绑包以处理所有以前iOS版本的轮换..

Swift 3.2 +

override var shouldAutorotate: Bool {

    if #available(iOS 11.0, *) {
        // Anything else iOS 11 specific
        return true
    } 
    return false

}