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

SwiftUI中如何实现WebView全屏显示?

解决SwiftUI中WebView铺满全屏的问题

首先,你不能直接用self.view.frame.height是因为SwiftUI的View结构体并没有view属性——这是UIKit的思路,在SwiftUI里不适用。要让WebView铺满全屏,你需要让布局容器自适应可用空间,再让WebView占满容器的高度:

修改步骤:

  • 给外层的VStack添加.frame(maxWidth: .infinity, maxHeight: .infinity),让它撑满整个屏幕的可用空间(默认VStack只会包裹内容高度)。
  • 移除WebView上固定的.frame(height: 900),替换成.frame(maxHeight: .infinity),这样WebView会自动占满父容器分配的所有高度。
  • 如果需要忽略安全区域(比如顶部状态栏、底部HomeIndicator),可以给最外层的View加上.edgesIgnoringSafeArea(.all)。

修改后的完整代码:

struct ContentView: View {
    @State private var showWebView = false
    private let urlString: String = "https://example.com"
    
    var body: some View {
        VStack(spacing: 40) {
            WebView(url: URL(string: urlString)!)
                .frame(maxHeight: .infinity) // 占满父容器高度
                .cornerRadius(10)
                .shadow(color: .black.opacity(0.3), radius: 20.0, x: 5, y: 5)
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity) // 让VStack撑满全屏
        .edgesIgnoringSafeArea(.all) // 可选:忽略安全区域,完全铺满屏幕
    }
}

补充说明:

如果你需要更精确地获取屏幕尺寸,也可以用GeometryReader来读取父容器的尺寸,然后传递给WebView:

struct ContentView: View {
    @State private var showWebView = false
    private let urlString: String = "https://example.com"
    
    var body: some View {
        GeometryReader { geometry in
            VStack(spacing: 40) {
                WebView(url: URL(string: urlString)!)
                    .frame(height: geometry.size.height)
                    .cornerRadius(10)
                    .shadow(color: .black.opacity(0.3), radius: 20.0, x: 5, y: 5)
            }
        }
        .edgesIgnoringSafeArea(.all)
    }
}

不过第一种方法(用maxHeight: .infinity)更符合SwiftUI的布局逻辑,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:35:21