キーボードの表示/非表示を検出するように NSNotification オブザーバーを設定する方法を知っています。これからキーボードの高さを取得できます。しかし、キーボードがまだ表示されているときにデバイスを回転させるとどうなりますか?
この新しい状態でキーボードの高さを取得する方法はありますか? キーボードにはまだ新しい通知が表示されているため、トリガーされません。
NSNotificationCenter を引き続き使用する必要がありますが、別のキーを観察する必要があります。あなたが探しているキーはUIKeyboardDidChangeFrameNotificationです。これは、ドキュメントによると、キーボードのフレームが変更された直後に投稿されます。
iOS 6+では、 を受信するように登録しUIKeyboardDidShowNotification
た場合、向きが変わるとセレクターが再度呼び出されます。
これは Appleが キーボードの管理 のサンプル コードで使用する通知ですが、この通知を使用すると、ランドスケープ モードでキーボードの高さを計算するときに計算が間違っています。
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
上記を次のように置き換えます。
// Works in both portrait and landscape mode
CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
kbRect = [self.view convertRect:kbRect toView:nil];
CGSize kbSize = kbRect.size;