1
1

More than 1 year has passed since last update.

【SwiftUI】SFSafariViewControllerを使う

Posted at

はじめに

昨日に引き続き、KeyboardKitでお世話になっているdanielsaidiさんのライブラリを見てたらWebViewKitというものを見つけました。
便利だったので紹介します。

ただSFSafariViewControllerを使うためだけにライブラリを使うのは気が引けると思うので中身のコードも載せときます。

動画

Simulator Screen Recording - iPhone 14 - 2022-11-15 at 19.55.26.gif

使い方

import SwiftUI
import WebViewKit

struct ContentView: View {
    @State var isSafariWebView: Bool = false
    private var url = "https://danielsaidi.github.io/WebViewKit/documentation/webviewkit/getting-started/"
    var body: some View {
        VStack {
            Button {
                isSafariWebView = true
            } label: {
                Text("表示")
            }
        }
        .fullScreenCover(isPresented: $isSafariWebView) {
            SafariWebView(url: URL(string: url)!) { configuration in
                configuration.dismissButtonStyle = .close
                configuration.preferredBarTintColor = .green
                configuration.preferredControlTintColor = .purple
            }
            .edgesIgnoringSafeArea(.all)
        }
    }
}

カスタマイズ

左上のボタンスタイル

configuration.dismissButtonStyle = .close // 閉じる
configuration.dismissButtonStyle = .cancel // キャンセル
configuration.dismissButtonStyle = .done // 完了

コントロールバーの色

configuration.preferredBarTintColor = .green

コントロールバーのテキストの色

configuration.preferredControlTintColor = .purple

その他もあったらコメントで教えてください!

SFSafariViewControllerだけ使いたい方

使い方は同じです。

import SwiftUI
import SafariServices

struct SafariWebView: UIViewControllerRepresentable {
    init(
        url: URL,
        configuration: SFSafariViewController.Configuration = .init(),
        controllerConfiguration: @escaping (SFSafariViewController) -> Void = { _ in }) {
        self.url = url
        self.configuration = configuration
        self.controllerConfiguration = controllerConfiguration
    }
    
    private let url: URL
    private let configuration: SFSafariViewController.Configuration
    private let controllerConfiguration: (SFSafariViewController) -> Void

    func makeUIViewController(context: Context) -> SFSafariViewController {
        let controller = SFSafariViewController(url: url, configuration: configuration)
        controllerConfiguration(controller)
        return controller
    }

    func updateUIViewController(_ safariViewController: SFSafariViewController, context: Context) {}
}

おわり

便利ですねー

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1