UIDevice.current.setValue(value,forKey:“orientation”)如果手机保持横向并倾斜45 - 90度不起作用

时间:2017-05-26 20:19:05

标签: ios swift orientation

我正在使用

let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")

强制呈现视图控制器以横向显示。这是导航控制器流程的一部分。这可以按预期工作,但如果手机保持在横向并且标题在45到90度之间,则视图将以纵向显示。调用该方法并且预期值是正确的,但不会发生横向更改。这可以在带有导航控制器的裸骨项目中重现。

有没有人知道可能导致这种行为的原因是什么?

3 个答案:

答案 0 :(得分:1)

您可以覆盖

func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)

https://developer.apple.com/reference/uikit/uitraitenvironment/1623516-traitcollectiondidchange

中所述

,如

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];
    if ((self.traitCollection.verticalSizeClass != previousTraitCollection.verticalSizeClass)
        || (self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass)) {
        // your custom implementation here
    }
}

根据需要保持您的方向。或者,在XCode中,单击目标,选择“常规”选项卡,然后仅选择一个允许的方向。

答案 1 :(得分:1)

试试这个:

open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    get {
        return UIInterfaceOrientationMask.landscapeRight
    }
}

open override var shouldAutorotate: Bool {
    get {
        return false
    }
}

open override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    get {
        return UIInterfaceOrientation.landscapeRight
    }
}

来自Setting device orientation in Swift iOS的@Dragos回答

答案 2 :(得分:0)

我还遇到了一个奇怪的问题,当您将设备旋转到要在进入下一个视图控制器时要更改的方向时,屏幕将保持纵向模式。我设法通过致电

解决了这个问题

UINavigationController.attemptRotationToDeviceOrientation()

之后

UIDevice.current.setValue(value, forKey: "orientation")

被称为

。 我猜这只有在您使用UINavigationController的情况下才能起作用。