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

R.P*_*son 6 orientation ios swift

我正在使用

let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
Run Code Online (Sandbox Code Playgroud)

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

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

Hun*_*ocz 5

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

UINavigationController.attemptRotationToDeviceOrientation()

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

被称为。我想这只有在您使用UINavigationController.


mik*_*kep 1

你可以覆盖

func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
Run Code Online (Sandbox Code Playgroud)

如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
    }
}
Run Code Online (Sandbox Code Playgroud)

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