WKWebView不显示导航栏

时间:2020-05-19 01:43:22

标签: ios swift swiftui wkwebview

我在SwiftUI中有一个视图,显示了一个WKWebView,该视图使用UIViewControllerRepresentable类传递给了主ContentView,该类是按照Paul Huson's 'Creating a simple browser with WKWebView的指示实现的。但是,当我在模拟器中加载应用程序时,似乎没有导航栏。

这是我的代码:

ContentViewBrowserView

struct ContentView: View {

    let browserView = BrowserView()
    var body: some View {
        browserView
    }
}

struct BrowserView: UIViewControllerRepresentable {

    func makeUIViewController(context: UIViewControllerRepresentableContext<BrowserView>) -> WKBrowser {
        let browser = WKBrowser()
        return browser
    }

    func updateUIViewController(_ uiViewController: WKBrowser, context: UIViewControllerRepresentableContext<BrowserView>) {
        // Empty
    }

}

WKBrowser

class WKBrowser: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!

    var webURL = URL(string: "https://www.hackingwithswift.com")!

    override func loadView() {
        webView = WKWebView()
        webView?.navigationDelegate = self
        self.view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        webView.load(URLRequest(url: webURL))
    }
}

结果:

The WKWebView

与本教程中具有导航栏的WKWebView相比,如下所示:

enter image description here

要确保显示导航栏,我必须添加或编辑什么?

编辑05/19/2020:

我想通过navigationItem.rightBarItem函数将项目添加到导航栏中,并添加到viewDidLoad中,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()
    webView.load(URLRequest(url: webURL))
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Open", style: .plain, target: self, action: #selector(someFunction)
}

@objc func someFunction(){
    // Do something
}

理想地,结果看起来类似于SFSafariViewController

enter image description here

但是,当我将UIViewRepresentable类包装在NavigationView中时,这些项目没有添加到显示的导航栏中,而是得到了:

enter image description here

2 个答案:

答案 0 :(得分:1)

如果要使用UIKit部分中的导航栏,则需要将UIKit浏览器包装在UINavigationController中,如下所示

使用Xcode 11.4 / iOS 13.4进行了测试

demo

struct BrowserView: UIViewControllerRepresentable {

    func makeUIViewController(context: Context) -> UINavigationController {
        let browser = WKBrowser()
        return UINavigationController(rootViewController: browser)
    }

    func updateUIViewController(_ uiViewController: UINavigationController, context: Context) {
        // Empty
    }

}

答案 1 :(得分:0)

在遵循同一教程的同时,我正在使用Xcode 14。嵌入到Navigation Controller中可以解决该问题,而无需更改教程中的任何代码。