我正在使用
let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
强制呈现视图控制器以横向显示。这是导航控制器流程的一部分。这可以按预期工作,但如果手机保持在横向并且标题在45到90度之间,则视图将以纵向显示。调用该方法并且预期值是正确的,但不会发生横向更改。这可以在带有导航控制器的裸骨项目中重现。
有没有人知道可能导致这种行为的原因是什么?
答案 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
的情况下才能起作用。