事象
WKWebViewで描画しているページにおいて、テキストフィールドなどにフォーカスを当てた場合にキーボードが表示されるが、このときアプリ内のパフォーマンスが低下しているのか画面のカクツキが酷くなる。
(キーボード入力しても数秒後に文字が表示される、画面内の他のコンテンツをタップしても数秒間動作しないなど)
対処
原因ははっきりと分かっていないが、仮対応としてWKWebViewに対してSafeAreaの設定を行うことでパフォーマンス低下が発生しなくなった。
今のままだとSafeArea侵略してしまうので、原因わかったり回避策分かれば追記予定です。
.ignoresSafeArea() // パフォーマンス低下しない
.edgesIgnoringSafeArea(.all) // パフォーマンス低下しない
.edgesIgnoringSafeArea(.top) // パフォーマンス低下する
.edgesIgnoringSafeArea(.bottom) // パフォーマンス低下しない
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
を指定することで解決することを確認。
.ignoresSafeArea(.keyboard)
.edgesIgnoringSafeArea(.bottom)
の指定だと描画に影響があったのでこちらを使用します。
パフォーマンスが低下していたのはSwiftUIのキーボード避けの影響を受けていた感じなのかな。
解決のヒントになったサイト
ありがとうございます🙏
SwiftUI in iOS14 Keyboard Avoidance Issues and IgnoresSafeArea Modifier Issues
ignoresSafeArea の第一引数と SwiftUI のキーボード避け