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

SwiftUI中视频无法横向铺满屏幕问题求助

解决视频无法横向边缘铺满的问题

问题根源

从你的代码和截图来看,主要有两个原因导致视频左右出现空白:

  1. ContentView中MediaCardView的水平内边距:你给MediaCardView添加了.padding(.horizontal, 16),这直接让卡片左右各留了16pt的空白,视频自然无法铺满屏幕宽度。
  2. VideoMediaView的固定高度设置:固定frame(height: 560)会限制视频的自适应能力,同时硬编码的aspectRatio(9/16)可能和视频实际比例不匹配,导致布局留白。

修复步骤

1. 移除水平内边距

修改ContentView中MediaCardView的padding设置,去掉水平方向的padding:

ForEach(viewModel.mediaData) { media in
    MediaCardView(media: media)
        .padding(.vertical, 8) // 只保留垂直方向的间距
}

如果MediaCardView内部自身还有左右padding,也需要在其实现中移除相关设置。

2. 优化VideoMediaView的布局

去掉固定高度,让视频根据自身比例自适应,同时强制铺满宽度:

struct VideoMediaView: View {
    let videoURL: URL

    var body: some View {
        VideoPlayer(player: AVPlayer(url: videoURL))
            .aspectRatio(contentMode: .fill) // 按视频自身比例填充,超出部分裁剪
            .frame(maxWidth: .infinity) // 强制铺满父视图宽度
            .clipped() // 裁剪超出frame的内容
    }
}

如果需要强制保持特定比例(比如竖屏9:16),可以将aspectRatio改为:

.aspectRatio(9/16, contentMode: .fill)

这样视频会保持9:16的比例,同时铺满宽度,高度自动计算。

额外检查

如果修改后仍有空白,需要确认:

  • 父视图(比如MediaCardView)是否设置了frame或padding限制宽度
  • ScrollView或NavigationView是否有默认的内边距,可以通过添加.edgesIgnoringSafeArea(.horizontal)尝试(谨慎使用,避免影响其他布局)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:06:04