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
。
我创建了一个 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
。