AVKit.AVPlayerViewController语言 - 在iOS11及更高版本中不可见的控件



我有一个带控件的视频播放器。 这些在iOS11 +中不可见 没有问题到iOS10

这是iPhone8模拟器的演示

苹果手机 8 演示

版这是iPhoneX模拟器的演示。控件未显示在播放器底部

苹果手机 X 演示版

我相信这与新的安全区有很大关系。我们使用contentOffset(下图( 从顶部偏移。更改值没有区别。不可见控件

这是我用来配置播放器的代码:

let statusBarHeight: CGFloat = 20
let contentOffset: CGFloat = 50
func setupPlayerView() {
containerView.addSubview(moviePlayerController.view)
moviePlayerController.videoGravity = AVLayerVideoGravity(rawValue: AVLayerVideoGravity.resizeAspect.rawValue)
moviePlayerController.view.sizeToFit()
moviePlayerController.showsPlaybackControls = true
moviePlayerController.view.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 11.0, *) {
moviePlayerController.view.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: contentOffset).isActive = true
} else {
moviePlayerController.view.topAnchor.constraint(equalTo: topAnchor, constant: statusBarHeight + contentOffset).isActive = true
}
NSLayoutConstraint.activate([
moviePlayerController.view.bottomAnchor.constraint(equalTo: bottomAnchor),
moviePlayerController.view.leftAnchor.constraint(equalTo: leftAnchor),
moviePlayerController.view.rightAnchor.constraint(equalTo: rightAnchor)
])
}

showPlaybackControls设置为True,这是默认值

还有其他人遇到过这个问题吗?

你的代码总是错的。即使在iOS 10上,控件也位于屏幕底部,远离电影。正确的方法是获取视频轨道的naturalSize并使用它来配置播放器视图的纵横比,以便播放器视图的大小与电影的大小相同。现在,控件将出现在电影的底部,而不是屏幕的底部。

另一个问题是你正在做的事情是完全非法的。您不能只制作一个AVPlayerViewController,获取视图控制器的视图并将该视图填充到界面中addSubview。为了使视图控制器成为self子视图控制器(当前的视图控制器 - 而您没有在跳舞(,您需要做一个严格的舞蹈。这是一个工作示例:

let url = // whatever
let player = AVPlayer(url:url)
let av = AVPlayerViewController()
av.player = player
av.view.frame = // whatever
self.addChild(av) // <—- LOOK!
self.view.addSubview(av.view)
av.didMove(toParent:self) // <— LOOK!

(请注意,这是 Swift 4.2

最新更新