【问题标题】:WKWebView not showing Navigation BarWKWebView 不显示导航栏
【发布时间】:2023-04-08 01:22:01
【问题描述】:

我在 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))
    }
}

结果:

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

为了确保出现导航栏,我必须添加或编辑什么?

编辑 2020 年 5 月 19 日:

我想通过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

但是,当我将 UIViewRepresentable 类包装在 NavigationView 中时,这些项目不会添加到出现的导航栏中,而是得到以下信息:

【问题讨论】:

  • 为什么需要它?无论如何,如果您愿意,可以将其放入 NavigationView 中,或者以通常的方式放入可表示侧的 UINavigationController 中。
  • 请查看我的问题的编辑。我想在viewDidLoad 中使用navigation.rightBarItem 函数,并且将browserView 放在NavigationView 中不允许我向出现的导航栏添加项目。

标签: ios swift swiftui wkwebview


【解决方案1】:

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

使用 Xcode 11.4 / iOS 13.4 测试

struct BrowserView: UIViewControllerRepresentable {

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

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

}

【讨论】:

    【解决方案2】:

    我正在使用 Xcode 14,同时遵循相同的教程。嵌入导航控制器解决了这个问题,而无需更改教程中的任何代码。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 2018-06-01
      • 2013-08-21
      • 2016-06-14
      相关资源
      最近更新 更多