SwiftUIでWebViewを使ってみました。
SwiftUI専用のWebViewはまだないようで、WebKitのWKWebViewや、SafariServiceのSFSafariViewControllerを使う必要があります。
WKWebView
WKWebViewを使うには、まずUIViewRepresentableを使ってWKWebViewを表示するViewを作成します。
import SwiftUI
import WebKit
struct WebView : UIViewRepresentable {
    var url: URL
    func makeUIView(context: Context) -> WKWebView  {
        return WKWebView(frame: .zero)
    }
    func updateUIView(_ uiView: WKWebView, context: Context) {
        let req = URLRequest(url: url)
        uiView.load(req)
    }
}
#if DEBUG
struct WebView_Previews: PreviewProvider {
    static var previews: some View {
        WebView(url: URL(string: "https://apple.com")!)
    }
}
#endifこのWebViewを使うと、WebViewを表示することができます。
import SwiftUI
struct MyView : View {
    var url: URL
    var body: some View {
        WebView(url: url)
    }
}
#if DEBUG
struct MyView_Previews : PreviewProvider {
    static var previews: some View {
        MyView(url: URL(string: "https://apple.com")!)
    }
}
#endifSFSafariViewController
SFSafariViewControllerもWKWebViewと同様にUIViewControllerRepresentableを使ってブリッジする必要があります。
import SwiftUI
import SafariService
struct SafariView: UIViewControllerRepresentable {
    var url: URL
    func makeUIViewController(context: UIViewControllerRepresentableContext<SafariView>) -> SFSafariViewController {
        return SFSafariViewController(url: url)
    }
    func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext<SafariView>) { }
}
#if DEBUG
struct SafariView_Previews: PreviewProvider {
    static var previews: some View {
        SafariView(url: URL(string: "https://apple.com")!)
    }
}
#endif今のところモーダルで表示する場合は問題無いようですが、プッシュで表示すると、ナビゲーションバーが2重で表示される問題があるようです。
エンジニアリング SwiftUI WebView
関連記事
- 
              
                2025/9/21
                iOSDC Japan 2025に参加しましたiOS 
- 
              
                2025/3/28
                Macのストレージに空き容量があるのに、実際には空き容量がない状態になっているときMac Storage 
- 
              
                2024/3/24
                try! Swift Tokyo 2024try! Swift Tokyo 2024の参加メモ Swift 
- 
              
                2023/1/31
                SwiftUIでTabBarを非表示にするSwiftUI TabBar 
- 
              
                2023/1/14
                Bootstrap5.3で追加されたダークモードに対応してみましたBootstrap DarkMode 
- 
              
                2021/2/17
                brew upgradeで Your CLT does not support macOS 11というエラーがでたhomebrew macOS Big Sur 
- 
              
                2020/12/1
                Apple Silicon搭載 MacBook Pro M1で Homebrewとrbenvをインストールする先日購入したApple Silicon搭載 MacBook Pro M1にこのブログをビルドするためにHomebrewとrbenvをインストールしたのでメモ。 Apple Silicon Homebrew rbenv 
- 
              
                2020/11/27
                Apple Silicon搭載のMacBook Pro M1が危うく文鎮化するところだったので記録Apple Silicon搭載のMacBook Pro 13インチを仕事用に購入したのですが、クリーンインストールしたところ文鎮化しかけたので記録しておきます。 MacBook Pro Apple Apple Silicon M1 
- 
              
                2020/6/23
                Platform State of the UnionまとめPlatform State of the Unioまとめ WWDC2020 Apple アップル iOS macOS watchOS tvOS 
- 
              
                2020/6/23
                WWDC2020キーノートまとめWWDC2020 キーノートまとめ WWDC2020 Apple アップル iOS macOS watchOS tvOS