【发布时间】:2023-04-08 01:22:01
【问题描述】:
我在 SwiftUI 中有一个视图,它显示了一个 WKWebView,它使用 UIViewControllerRepresentable 类传递给主 ContentView,按照 Paul Huson's 'Creating a simple browser with WKWebView 的说明实现。但是,当我在模拟器中加载应用程序时,似乎没有导航栏。
这是我的代码:
ContentView 和 BrowserView
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