LoginSignup
0
0

WKWebViewでキーボードを展開するとパフォーマンスが低下する

Last updated at Posted at 2023-06-06

事象

WKWebViewで描画しているページにおいて、テキストフィールドなどにフォーカスを当てた場合にキーボードが表示されるが、このときアプリ内のパフォーマンスが低下しているのか画面のカクツキが酷くなる。
(キーボード入力しても数秒後に文字が表示される、画面内の他のコンテンツをタップしても数秒間動作しないなど)

対処

原因ははっきりと分かっていないが、仮対応としてWKWebViewに対してSafeAreaの設定を行うことでパフォーマンス低下が発生しなくなった。
今のままだとSafeArea侵略してしまうので、原因わかったり回避策分かれば追記予定です。

WebView.swift
.ignoresSafeArea() // パフォーマンス低下しない
.edgesIgnoringSafeArea(.all) // パフォーマンス低下しない
.edgesIgnoringSafeArea(.top) // パフォーマンス低下する
.edgesIgnoringSafeArea(.bottom) // パフォーマンス低下しない
WKWebView.swift
let config = WKWebViewConfiguration()

// JavaScriptの実行を許可
let preference = WKWebpagePreferences()
preference.allowsContentJavaScript = true
config.defaultWebpagePreferences = preference

// インライン再生を許可
config.allowsInlineMediaPlayback = true

// webview生成
webView = WKWebView(frame: .zero, configuration: config)

super.init()
webView.navigationDelegate = self
webView.uiDelegate = self

セーフエリアについて参考にさせていただいたサイト

解決(2023/06/08)

ignoresSafeAreaにて第1引数にkeyboardを指定することで解決することを確認。

WebView.swift
.ignoresSafeArea(.keyboard) 

.edgesIgnoringSafeArea(.bottom)の指定だと描画に影響があったのでこちらを使用します。
パフォーマンスが低下していたのはSwiftUIのキーボード避けの影響を受けていた感じなのかな。

解決のヒントになったサイト

ありがとうございます🙏
SwiftUI in iOS14 Keyboard Avoidance Issues and IgnoresSafeArea Modifier Issues
ignoresSafeArea の第一引数と SwiftUI のキーボード避け

0
0
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
0
0