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

如何固定AVPlayerViewController的videoGravity为.resizeAspect禁止切换

固定AVPlayerViewController视频缩放模式方案

你记忆里的布尔开关是iOS 16+新增的showsZoomControls属性,直接设置为false即可同时隐藏缩放切换按钮、禁用双击切换缩放的系统手势,配合初始videoGravity设置就能完全锁死缩放模式:

let playerViewController = AVPlayerViewController()
playerViewController.player = yourAVPlayerInstance
// 设置默认缩放模式为等比适配
playerViewController.videoGravity = .resizeAspect
// 禁用缩放切换能力
playerViewController.showsZoomControls = false

iOS 16以下版本兼容

低版本系统没有提供对应开关,不需要遍历子视图隐藏按钮或者自定义手势拦截,用KVO监听强制回写属性即可,能同时拦截按钮点击、双击触发的缩放切换,不影响其他播放控件正常使用:

// 初始化时设置默认缩放模式
playerViewController.videoGravity = .resizeAspect
// 持有该监听对象避免提前释放
var gravityObservation: NSKeyValueObservation?
gravityObservation = playerViewController.observe(\.videoGravity, options: .new) { vc, _ in
    guard vc.videoGravity != .resizeAspect else { return }
    // 只要检测到缩放模式被修改,立刻强制改回目标值
    vc.videoGravity = .resizeAspect
}

系统默认支持的两种视频缩放模式

  • .resizeAspect:等比缩放完整展示视频内容,视视频和屏幕比例差可能出现黑边
  • .resizeAspectFill:等比缩放填满整个播放区域,可能裁剪视频边缘内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:54:32