Изменение фона панели NavigationView при модальном представлении - PullRequest
0 голосов
/ 13 октября 2019

Я не могу найти способ установить непрозрачный черный цвет панели навигации ...

Кажется, что все связанные хаки не работают, если представление навигации представлено модально ...

Вот как я представляю свой webView:

               Button(action: { self.showFAQ.toggle() }) {
                        Text("Frequently Asked Questions").foregroundColor(.orange)
                    }.sheet(isPresented: $showFAQ) {
                        WebView(isPresented: self.$showFAQ, url: self.faqURL)
                    }

Это моя оболочка webView:

struct WebView: View {
    let url: URL

    @Binding var isPresented: Bool

    var body: some View {
        NavigationView {
            WebViewRepresentable(url: url)
                .navigationBarTitle("", displayMode: .inline)
                .navigationBarItems(trailing: Button(action: {
                    self.isPresented.toggle()
                }, label: { Text("Done") } ))
        }
    }

    init(isPresented: Binding<Bool>, url: URL) {
        self.url = url
        self._isPresented = isPresented

        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
    }

    struct WebViewRepresentable: UIViewRepresentable {
        let url: URL

        // Creates a UIKit view to be presented.
        func makeUIView(context: Context) -> WKWebView {
            let webView = WKWebView()
            webView.isOpaque = false
            webView.backgroundColor = .systemBackground
            return webView
        }

        // Updates the presented UIKit view (and its coordinator)
        // to the latest configuration.
        func updateUIView(_ uiView: WKWebView, context: Context) {
            let req = URLRequest(url: url)
            uiView.load(req)
        }
    }
}

UINavigationBarAppearance() игнорируется ... UINavigationBar.appearance() такжеигнорируется ...

1 Ответ

0 голосов
/ 13 октября 2019

Возможное решение - избегать использования NavigationView и просто добавить кнопку «Готово» для достижения того же результата:

struct WebView: View {
    let url: URL

    @Binding var isPresented: Bool

    var body: some View {
        VStack {
            HStack {
                Spacer()
                Button(action: {
                    self.isPresented.toggle()
                }) {
                    Text("Done").padding(.all, 20)
                }
            }
            WebViewRepresentable(url: url)
        }.background(Color.black.opacity(1.0))
         .edgesIgnoringSafeArea(.all)
    }

    init(isPresented: Binding<Bool>, url: URL) {
        self.url = url
        self._isPresented = isPresented

        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
    }

    struct WebViewRepresentable: UIViewRepresentable {
        let url: URL

        // Creates a UIKit view to be presented.
        func makeUIView(context: Context) -> WKWebView {
            let webView = WKWebView()
            webView.isOpaque = false
            webView.backgroundColor = .systemBackground
            return webView
        }

        // Updates the presented UIKit view (and its coordinator)
        // to the latest configuration.
        func updateUIView(_ uiView: WKWebView, context: Context) {
            let req = URLRequest(url: url)
            uiView.load(req)
        }
    }
}
...