Как мне использовать SFSafariViewController с SwiftUI? - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь представить SFSafariViewController из NavigationButton, но я не уверен, как это сделать с помощью SwiftUI.

В UIKit я бы просто сделал:

let vc = SFSafariViewController(url: URL(string: "https://google.com"), entersReaderIfAvailable: true)
    vc.delegate = self

    present(vc, animated: true)

1 Ответ

2 голосов
/ 09 июня 2019

SFSafariViewController является компонентом UIKit, поэтому вам нужно сделать его UIViewControllerRepresentable.

См. Интеграция SwiftUI WWDC 19 видео для получения дополнительной информации о том, как соединить UIKit компоненты с SwiftUI.

struct SafariView: UIViewControllerRepresentable {

    let url: URL

    func makeUIViewController(context: UIViewControllerRepresentableContext<SafariView>) -> SFSafariViewController {
        return SFSafariViewController(url: url)
    }

    func updateUIViewController(_ uiViewController: SFSafariViewController,
                                context: UIViewControllerRepresentableContext<SafariView>) {

    }

}

Замечание: SFSafariViewController предназначено для представления поверх другого контроллера представления, а не для перемещения в стек навигации.

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

enter image description here

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

struct ContentView : View {

    let url = URL(string: "https://www.google.com")!

    var body: some View {
        EmptyView()
        .presentation(Modal(SafariView(url:url)))
    }
}

Это выглядит так:

enter image description here

Я предлагаю портировать WKWebView на SwiftUI по протоколу UIViewRepresentable и использовать его вместо него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...