iOS开发:如何将视频适配到Storyboard创建的View中?
如何让视频完全适配Storyboard中创建的View
我正尝试将视频适配到在Storyboard中创建的View内。
Storyboard中添加View的操作截图


当前视频在模拟器中的显示效果不符合预期,我希望视频能完全适配我创建的videoView。
以下是我创建视频视图的代码,其中videoView即为目标显示View:
func createVideoView() { if let url = URL(string: self.videoUrl!) { let player = AVPlayer(url: url) let avController = AVPlayerViewController() avController.player = player // your desired frame avController.view.frame = self.videoView.frame self.view.addSubview(avController.view) self.addChild(avController) } }
解决方法
你当前的问题在于直接设置frame只会固定初始尺寸,无法跟随videoView的布局变化,同时没有配置视频内容的适配规则。可以按以下方式修改代码:
用AutoLayout实现完全嵌入
替换固定frame的写法,通过AutoLayout约束让AVPlayerViewController的View完全贴合videoView的边界:func createVideoView() { guard let url = URL(string: self.videoUrl!) else { return } let player = AVPlayer(url: url) let avController = AVPlayerViewController() avController.player = player // 关闭自动转换的约束,启用自定义AutoLayout avController.view.translatesAutoresizingMaskIntoConstraints = false // 将avController的View添加到videoView内部,而非当前控制器的view self.videoView.addSubview(avController.view) self.addChild(avController) // 添加四边约束,完全适配videoView NSLayoutConstraint.activate([ avController.view.topAnchor.constraint(equalTo: videoView.topAnchor), avController.view.leadingAnchor.constraint(equalTo: videoView.leadingAnchor), avController.view.trailingAnchor.constraint(equalTo: videoView.trailingAnchor), avController.view.bottomAnchor.constraint(equalTo: videoView.bottomAnchor) ]) // 完成子控制器的生命周期关联 avController.didMove(toParent: self) }配置视频填充模式
根据需求选择视频的显示规则:- 若要视频完全填充
videoView(可能裁剪视频边缘):avController.videoGravity = .resizeAspectFill - 若要保持视频比例并完整显示(View边缘可能出现黑边):
avController.videoGravity = .resizeAspect
- 若要视频完全填充
内容的提问来源于stack exchange,提问作者themmfa
相关产品推荐
相关产品推荐

