App 中的很多时候我们需要直接加载展示网页视图,例如使用条款、网站页面,甚至是边缘业务打开网页视图,一般可以通过:Safari 打开、内置浏览器 SFSafariViewController 、WKWebView ,其中 WKWebView 最灵活扩展,自定义性更强,更推荐这种方式,SwiftUI 原生只支持使用 Safari 打开浏览网页,这很难满足一些要求。
Safari 方式打开网页
SwiftUI 内置 Link 控件,它会直接跳转到 Safari 打开指定地址网页
struct ContentView: View {
var body: some View {
NavigationStack {
Link(destination: URL(string: "https://www.codeun.com/")!) {
Image(systemName: "safari")
.font(.largeTitle)
.foregroundColor(.blue)
}
}
}
}使用 WKWebView 打开网页
这种方式 SwiftUI 没有提供 WKWebView 和 SFSafariViewController 原生支持,需要使用 UIKit UIViewRepresentable 帮助实现,下面的示例代码可以简单的构建一个内置 WebView 打开网页,通过跳转到 WebView 这个视图,传递 URL 即可打开指定网页。
import SwiftUI
import WebKit
struct WebView: UIViewRepresentable {
// 需打开网页的 URL 地址
let url: URL
// UIViewRepresentable 协议中必需的方法
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
// UIViewRepresentable 协议中必需的方法,当状态发生变化时,可以加载一个新的 URL。
func updateUIView(_ webView: WKWebView, context: Context) {
let request = URLRequest(url: url)
webView.load(request)
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, WKNavigationDelegate {
var parent: WebView
init(_ parent: WebView) {
self.parent = parent
}
// 可以实现 WKNavigationDelegate 的其他方法来处理页面加载状态、错误等
}
}
struct ContentView: View {
@State private var showSafari = false
// 示例在底部 Sheet 弹出网页视图
var body: some View {
Button("Open Safari View") {
showSafari = true
}
.sheet(isPresented: $showSafari) {
SafariView(url: URL(string: "https://www.example.com")!)
}
}
} 本文自 https://www.codeun.com 发布,相应代码均自主编写并严格审阅和测试,完整代码中包含丰富的学习笔记和使用方式、实用技巧。
· 如若转载,请注明出处:https://www.codeun.com/archives/1066.html ·