首页 > 解决方案 > NavigationView 下的 SwiftUI WKWebView 不接受 displayMode

问题描述

我创建了一个选项卡视图,其中第一个选项卡包含一个 WKWebView

struct WebView : UIViewRepresentable {
    let urlString : String

    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.load(URLRequest.init(url: URL.init(string: urlString)!))
    }
}

webview的使用如下:

struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){
            NavigationView {
                WebView(urlString: "...")
                .navigationBarTitle("Intérieur", displayMode: .large)
            }
            .tabItem {
                VStack {
                    Image(systemName:"...")
                        .foregroundColor(Color("brownGrey"))
                    Text("...")
                        .foregroundColor(Color("brownGrey"))
                }
            }.tag(0)

但无论我怎么努力,我都不能强迫NavigationView他们留在displayMode: .large

导航栏进入小模式,直到我滚动 webview 的内容,然后它变大。

如果我在上面的代码中用一个简单的 webview 替换Text("...")它,它会按预期工作。插入Text("...")上面的 webview 也可以,但我想在不引入人工垫片的情况下这样做。

这是启动应用程序时发生的情况:

标题正常显示,而 webview 的内容正在加载: 预 webview 加载

加载内容后, NavigationView 会减小其大小: 在此处输入图像描述

如果我拉下 webview 并放开 NavigationView 显示我希望它显示的方式: 在此处输入图像描述

在我看来,系统检测到它WKWebview位于导航栏下方并因此调整其行为的地方发生了一些神奇的事情。

有什么解决办法吗?

标签: iosswiftuiwkwebview

解决方案


WebView与(带有显式框架)和具有纯色作品的颜色VStack一起添加。ZStack

var body: some View {
    TabView(selection: $selection){
        NavigationView {
            VStack {
                ZStack {
                    Color(.gray)
                }.frame(width: 1, height: 1, alignment: .center)
                WebView(urlString: "https://prettyitgirl.blogspot.com/")
            }.navigationBarTitle("PrettyItGirl.com", displayMode: .large)
        }
...

不提供显式框架将为您提供自动调整大小的ZStack.

在此处输入图像描述


推荐阅读