NavigationView 下面的 SwiftUI WKWebView 不接受 displayMode

SwiftUI WKWebView below NavigationView not accepting displayMode

我创建了一个 tabview,其中第一个选项卡包含一个 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 的内容,然后它变为大模式。

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

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

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

加载内容后,NavigationView 会减小其大小:

如果我在 webview 上下拉并放开,NavigationView 会显示我想要的显示方式:

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

有什么解决办法吗?

VStack 中添加 WebView 以及 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