我只是在纵向模式下使用iOS应用,而且工作正常。
问题是我在navigationController上面呈现 AVPlayerViewController (两者都是以编程方式创建的)。这个玩家支持所有轮换(我不知道为什么!)。
我想将此修复为仅纵向模式,就像应用的其他部分一样。
我们怎么能这样做?
答案 0 :(得分:3)
创建一个继承自AVPlayerViewController的新类,并实现支持的接口方法。在此之后,只需创建您创建的类的对象,而不是初始化AVPlayerViewController的对象。
class MyPortraitVideoController: AVPlayerViewController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
}
已编辑添加:
请注意Documentation for AVPlayerViewController
州:
重要
不要继承AVPlayerViewController。压倒这一点 类的方法不受支持,导致未定义的行为。
由于这是公认的答案,我认为OP已经尝试了它并且它有效,但我想我应该在这里添加一个注释,以确保未来的读者知道任何潜在的问题。未定义的行为意味着这可能会在iOS的未来版本中停止工作。
答案 1 :(得分:0)
就我而言,我不得不限制某些视图的横向方向。因此,在 AppDelegate 中将 supportedInterfaceOrientationsFor 设置为 portrait 。当我显示AVPlayerViewController时,必须在 AppDelegate 中将 supportedInterfaceOrientationsFor 设置为 all 。 还要检查以下代码。
AppDelegate.swift
var shouldSupportLandscape = Bool()
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if self.shouldSupportLandscape == true {
return .all
}else {
return .portrait
}
}
存在时AVPlayerViewController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.shouldSupportLandscape = true
关闭AVPlayerViewController时
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.shouldSupportLandscape = false