Skip to content

UITextView:キーボード絡みの挙動・問題点

2011.03.26

今回は、UIEdgeInsets に関連する Tips 第3段として、UITextView の、キーボード絡みの挙動・問題点を紹介します。

 


UITextView のキーボード絡みの挙動は以下の通りです:

  • キーボードが表示されても、キーボードと被る領域を計算して frame 或は contentInset を調節することはない
  • 編集モードに入るとき、変換候補表示スペースを確保するため、contentInset.bottom を強制的に調節する
  • キーボードの言語が切り替わると、変換候補表示スペースを調節するため、contentInset.bottom を強制的に調節する
  • テキストを編集すると、contentInset.bottom を強制的に設定し直す
  • キーボードが隠れても、contentInset.bottom をリセットしない

UITextView は「キーボードが表示されても、キーボードと被る領域を計算して frame 或は contentInset を調節することはない」ため、自分で調節する必要があります。
* ビューが自分の frame を勝手に調節することは、往々にして好ましくないため、この挙動は問題ではないと言えます。

変換候補表示スペースを確保するための contentInset.bottom は、例えば英語の QWERTY だと 32、日本語テンキーだと 44 となります。「強制的に」と書いたのは、UITextView 生成時に contentInset.bottom を任意の値(例えば 50)に設定していたとしても、32 或は 44 にされてしまうためです。
*これは問題です。UITextView はもともとの contentInset.bottom が 0 であることを想定して作られているということで、拡張性が乏しいものになっています。

UITextView は、「キーボードが隠れても、contentInset.bottom をリセットしない」ため、一度編集モードになると、編集モードを抜けても下に余白ができてしまいます。
* これも問題と言えるでしょう。見た目が間抜けになってしまいます。

これらのことを踏まえ、次回は UITextView をキーボードと連携させる簡易な方法を紹介します。その次に、UITextView のサブクラスを作り、抜本的な解決を試みたいと思います。

Advertisements

From → Develop

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s