You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:如何将视频适配到Storyboard创建的View中?

如何让视频完全适配Storyboard中创建的View

我正尝试将视频适配到在Storyboard中创建的View内。

Storyboard中添加View的操作截图

Storyboard添加View步骤1
Storyboard添加View步骤2

当前视频在模拟器中的显示效果不符合预期,我希望视频能完全适配我创建的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的布局变化,同时没有配置视频内容的适配规则。可以按以下方式修改代码:

  1. 用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)
    }
    
  2. 配置视频填充模式
    根据需求选择视频的显示规则:

    • 若要视频完全填充videoView(可能裁剪视频边缘):
      avController.videoGravity = .resizeAspectFill
      
    • 若要保持视频比例并完整显示(View边缘可能出现黑边):
      avController.videoGravity = .resizeAspect
      

内容的提问来源于stack exchange,提问作者themmfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:45:34