SwiftUI WKWebView ниже NavigationView не принимает displayMode - PullRequest
2 голосов
/ 20 марта 2020

Я создал вкладку, где первая вкладка содержит 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)!))
    }
}

Веб-просмотр используется следующим образом:

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

Панель навигации переходит в маленький режим, пока я не прокручиваю содержимое веб-просмотра, затем он переходит в большое.

Если заменить в приведенном выше коде веб-просмотр с простым Text("...") работает как задумано. Вставка Text("...") над веб-представлением также работает, но я хотел бы сделать это без введения искусственной прокладки.

Вот что происходит при запуске приложения:

Название отображается нормально, во время загрузки содержимого веб-просмотра: pre webview load

После загрузки содержимого NavigationView уменьшает его размер: enter image description here

Если я разверните веб-просмотр и пусть go NavigationView покажет, как я хочу, чтобы он показывал: enter image description here

Мне кажется, что там, где происходит какое-то волшебство c система обнаруживает, что она находится на WKWebview ниже панели навигации, и, следовательно, адаптирует ее поведение.

Есть решение?

1 Ответ

0 голосов
/ 20 марта 2020

Добавление WebView в VStack вместе с ZStack (с явным фреймом) и с цветом, который имеет solid цвет работает.

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.

enter image description here

...