iOSの絵文字キーボード上で横スクロールすると、キーボードが勝手に閉じてしまう問題
iOSの絵文字キーボード上で横スクロールすると、勝手にキーボードが閉じられてしまう問題が発覚した。iOS 14、iOS 15で同様の問題が確認できている。
絵文字キーボードというのは下図のようなキーボードである。QWERTYなど他の種別のキーボードではフリック入力に対応しているためスワイプには対応していない。絵文字に関しては種類が多すぎるためかカテゴリー別に分類され横スクロールに対応している。私自身 iOS には12年ほど触れてきているが、絵文字を使うことはあっても今まで絵文字キーボードを使うことはなかったので、横スクロールできることも知らなかった。
絵文字キーボード上で横スクロールすると、キーボードが勝手に閉じてしまう
絵文字キーボード上で横スクロールするとキーボードが閉じられてしまう問題についてだが、結論としてはこの現象は Apple の不具合という。
文字入力中にリストをスクロールすると入力中のTextFieldが隠れてしまうため、一般的なアプリでは下記のようなリストをスクロールさせるとキーボードを閉じるという制御が入っていることが多い。
UIScrollView.appearance().keyboardDismissMode = .interactive
or
UIScrollView.appearance().keyboardDismissMode = .onDrag
絵文字キーボードは UICollectionView
で実装されているらしく、キーボード自身のスクロール処理に反応してキーボードを閉じてしまうというチグハグな挙動が発生してしまう。
- 絵文字を選択しようと思って横スクロールする
- リストがスクロールされたのでキーボードを閉じる
以上が本現象の原因と思われる。
解決編
前述した通りApple側での修正を待たないといけないため回避策はないが、スクロール時にキーボードを閉じる機能を UITableView
や SwiftUI の List
に制限できるのであれば回避可能である。
UITableView
と UICollectionView
の親クラスである UIScrollView
に対してではなく UITableView
の keyboardDismissMode
プロパティにのみ .onDrag
を指定する。
//UIScrollView.appearance().keyboardDismissMode = .onDrag
UITableView.appearance().keyboardDismissMode = .onDrag
ただ、これは根本的な解決にはならないため Apple の修正を待ちたい。
Discussion