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")!)
}
}
#endif
SFSafariViewController
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/3/28
Macのストレージに空き容量があるのに、実際には空き容量がない状態になっているとき
Mac Storage
-
2024/3/24
try! Swift Tokyo 2024
try! 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
-
2020/5/31
GitHub Pagesで無料ブログを作成する - Part4 自分のオリジナルのテーマを作る
Jekyllでは既存のテーマを使うこともできるのですが、さらに一歩踏み込んで、自分で既存のテーマをカスタマイズしたり、テーマを作ることもできます。
GitHub Pages ブログ