shouldAutorotate -> false,但模拟器仍然旋转。

3

我正在制作一个应用程序,仅在播放视频时支持横向方向。否则,所有场景仅支持纵向方向。我已在项目设置中检查了纵向、左右横向。我已在想要限制为仅使用纵向的ViewController中编写了以下代码。

override func viewWillAppear(animated: Bool) {
    let value = UIInterfaceOrientation.Portrait.rawValue
    UIDevice.currentDevice().setValue(value, forKey: "orientation")
}

override func shouldAutorotate() -> Bool {
    return false
}

override func supportedInterfaceOrientations() -> Int {
    return UIInterfaceOrientation.Portrait.rawValue
}

然而,当我按下(Command+左或右箭头)时,模拟器会旋转。因为我没有设备,所以必须在模拟器中测试。

请帮忙!谢谢!


这些方法被调用了吗(设置断点进行检查)?如果您使用导航控制器,则它们只会在导航控制器上被调用。 - dan
我正在使用导航控制器。但它们没有被调用。我已经放置了println()语句来确保它们被调用。 - Suvrat Apte
2个回答

0

是父级导航控制器决定其内容是否旋转。

您需要重写UINavigationController并添加类似以下内容的代码:

override func shouldAutorotate() -> Bool {
    return self.topViewController.shouldAutorotae()
}

override func supportedInterfaceOrientations() -> Int {
    return self.topViewController.shouldAutorotae()
}

嘿,非常感谢@SeNeO!它正在工作。但现在又出现了另一个问题。如果用户从横向模式下的视频播放器中按下返回按钮,则上一个VC不会旋转为纵向。viewWillAppear()被调用了。但它没有旋转到纵向。请帮忙!谢谢! - Suvrat Apte
我在子视图控制器的willMoveToParentViewController()中的viewWillAppear()添加了代码。它正在工作!谢谢@SeNeO - Suvrat Apte
很高兴能帮到你。 - SeNeO

0

有两件事情需要检查。首先,检查您的info.plist文件,并确保您已经删除了iPhone和iPad的“Portrait”选项。我曾经遇到过同样的问题,因为我没有删除iPad的“Portrait”选项。请参见这里:

enter image description here

其次,下面的代码可以帮助解决问题。但是,如果您有一个导航控制器,它可能无法正常工作。

override var shouldAutorotate: Bool {
    return true
}

他不能从info.plist中删除肖像模式,因为他的应用程序支持纵向方向。 - fishinear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接