キーボードの上下に同期してUIScrollViewのcontentInsetを変更する
最近何個かアプリを入れたのですが、iPhoneのキーボードが表示される際にキーボードに隠れる部分の制御処理をうまく同期させてないのがいくつかありまして、大枠でアプリの処理に問題がある訳ではないのですが挙動が微妙に気になるので、ちゃんと動くコードの例を貼っときます。
先に説明しますと、キーボードが表示されたり非表示になった際にUIKeyboardWillShowNotification / UIKeyboardWillHideNotificationが発生しますので、NSNotificationオブジェクトからキーボードの高さ、アニメーション速度等を取得してUITextViewのアウトレットtextViewのcontentInset.bottomとscrollIndicatorInsets.bottomをキーボードの高さに合わせて変更します。
UIKeyboardWillShowNotificationは変換候補用のビューが表示された際にも発生しますので、その時もtextViewの表示エリアは変更されます。
以下の例ではviewWillAppearとviewDidDisapperでNotificationを受け取るか制御してますが(モーダルビューを開いた際はこの処理は要らないので)、実際に使う際はこの辺はアプリの仕様に合わせる必要があると思います。まああくまでコード例ってことで。