AVKit.AVPlayerViewController - 控件在 iOS11 及更高版本中不可见
Posted
技术标签:
【中文标题】AVKit.AVPlayerViewController - 控件在 iOS11 及更高版本中不可见【英文标题】:AVKit.AVPlayerViewController - controls not visible with iOS11 and upwards 【发布时间】:2018-10-05 13:20:05 【问题描述】:我有一个带有控件的 videoPlayer。 这些在 ios11 + 中不可见 到iOS10都没问题
这是一个带有 iPhone8 模拟器的演示
iPhone 8 Demo
这是一个带有 iPhoneX 模拟器的演示。控件未显示在播放器底部
iPhone X Demo
我相信这与新的安全区有很大关系。我们使用 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)
])
showsPlaybackControls 设置为 True,不过这是默认设置
有其他人遇到过这个问题吗?
【问题讨论】:
我无法发表评论。这没有多大意义。 好的,将其添加到我的答案中。 【参考方案1】:您的代码总是错误的。即使在 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。)
【讨论】:
查看github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 示例。以上是关于AVKit.AVPlayerViewController - 控件在 iOS11 及更高版本中不可见的主要内容,如果未能解决你的问题,请参考以下文章