🍎

iOSの絵文字キーボード上で横スクロールすると、キーボードが勝手に閉じてしまう問題

2022/05/10に公開

iOSの絵文字キーボード上で横スクロールすると、勝手にキーボードが閉じられてしまう問題が発覚した。iOS 14、iOS 15で同様の問題が確認できている。

絵文字キーボードというのは下図のようなキーボードである。QWERTYなど他の種別のキーボードではフリック入力に対応しているためスワイプには対応していない。絵文字に関しては種類が多すぎるためかカテゴリー別に分類され横スクロールに対応している。私自身 iOS には12年ほど触れてきているが、絵文字を使うことはあっても今まで絵文字キーボードを使うことはなかったので、横スクロールできることも知らなかった。

絵文字キーボード上で横スクロールすると、キーボードが勝手に閉じてしまう

絵文字キーボード上で横スクロールするとキーボードが閉じられてしまう問題についてだが、結論としてはこの現象は Apple の不具合という。

文字入力中にリストをスクロールすると入力中のTextFieldが隠れてしまうため、一般的なアプリでは下記のようなリストをスクロールさせるとキーボードを閉じるという制御が入っていることが多い。

UIScrollView.appearance().keyboardDismissMode = .interactive

or

UIScrollView.appearance().keyboardDismissMode = .onDrag

絵文字キーボードは UICollectionView で実装されているらしく、キーボード自身のスクロール処理に反応してキーボードを閉じてしまうというチグハグな挙動が発生してしまう。

  1. 絵文字を選択しようと思って横スクロールする
  2. リストがスクロールされたのでキーボードを閉じる

以上が本現象の原因と思われる。

解決編

前述した通りApple側での修正を待たないといけないため回避策はないが、スクロール時にキーボードを閉じる機能を UITableView や SwiftUI の List に制限できるのであれば回避可能である。

UITableViewUICollectionView の親クラスである UIScrollView に対してではなく UITableViewkeyboardDismissMode プロパティにのみ .onDrag を指定する。

//UIScrollView.appearance().keyboardDismissMode = .onDrag
UITableView.appearance().keyboardDismissMode = .onDrag

ただ、これは根本的な解決にはならないため Apple の修正を待ちたい。

参考記事

Discussion