16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SwiftUIでHTMLを表示する方法

Last updated at Posted at 2023-03-31

結論

以下のように実装することでSwiftUIでHTMLのコードを反映させることができます。

import SwiftUI
import WebKit

struct HTMLView: UIViewRepresentable {
    let htmlString: String
    
    // SwiftUIが初めてビューを作成するときに実行される
    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }
    
    // ビューが変更されたときに実行される
    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.loadHTMLString(htmlString, baseURL: nil)
    }
}

struct ContentView: View {
    var body: some View {
        VStack {
            HTMLView(htmlString:
        """
        <html lang="ja">
          <head>
            <style>
              h1 {
                color: red;
                font-weight: bold;
                font-size: 60px;
              }

              p {
                font-size: 40px;
              }
            </style>
          </head>
          <body>
            <h1>Hello SwiftUI!!</h1>
            <p>SwiftUI勉強中</p>
          </body>
        </html>
        """)
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

解説

UIViewRepresentableとは?

SwiftUIからUIKitのビューやコントローラを扱うためのインターフェースです。
UIKitはiOSアプリケーションの中核となるフレームワークで、このフレームワークはHTMLを描画する機能がサポートされています。
SwiftUIは新しい別のフレームワークですが、HTMLを描画する機能をサポートしておりません。
SwiftUIからUIKitの機能を利用するためにUIViewRepresentableがインターフェースとしてSwiftUIに用意してあります。
今回のケースではSwiftUIからUIViewRepresentableを通してUIKitを利用し、HTMLを描画しております。

makeUIViewとは?

UIViewRepresentableの仕様でSwiftUIが初めてビューを作成するときに実行される処理を書くことができる関数です。

updateUIViewとは?

UIViewRepresentableの仕様でビューが変更されたときに実行される処理を書くことができる関数です。

WKWebViewとは?

Webページを表示するためのクラスです。
今回はビュー作成時(makeUIView実行時)にインスタンス作成を行い、その後に実行されるupdateUIView関数内でHTMLの読み込みを行っています。

終わりに

学習を始めたばかりで、間違った理解をしているところがあるかもしれませんが、コメントから指摘いただけると幸いです。
ここまで読んでいただきありがとうございました。

16
6
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
16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?