キーボードが表示されたときとキーボードが非表示になったときの 2 つのイベントを処理できます。iOS 8.2 以前ではすべて正常に動作しました。
しかし、キーボード言語を変更したときにイベントを処理する方法は? 英語キーボードを絵文字キーボードに変更すると、絵文字キーボード (ios 8.3 の場合) の高さが大きくなり、コンテンツが隠れてしまいます。
それとも、iOS 8.3 の絵文字キーボードの高さを制御する方法をご存知でしょうか?
キーボードが表示されたときとキーボードが非表示になったときの 2 つのイベントを処理できます。iOS 8.2 以前ではすべて正常に動作しました。
しかし、キーボード言語を変更したときにイベントを処理する方法は? 英語キーボードを絵文字キーボードに変更すると、絵文字キーボード (ios 8.3 の場合) の高さが大きくなり、コンテンツが隠れてしまいます。
それとも、iOS 8.3 の絵文字キーボードの高さを制御する方法をご存知でしょうか?
わかった。古いコードを見て、2 つのオブザーバー ( / ) を使用していないことを思い出しました。各イベントで発生する単一のオブザーバー ( ) を使用します: キーボードの非表示、キーボードの表示、キーボードの変更フレーム。UIKeyboardDidShowNotification
UIKeyboardDidHideNotification
UIKeyboardWillChangeFrameNotification
私の場合、テキスト ボックスと送信ボタンは にネストされており、これはの にUIView
追加されたビューです。view
UIViewController
オブザーバーを追加し、オブザーバーviewDidAppear
を削除しviewWillDisappear
ます(ビューがアクティブでないときに通知が発生するのを避けるため)。
上記の情報はあなたの場合には必要ありません。情報のために追加しただけです。関連するコードは次のとおりです。
オブザーバーを追加:
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
ハンドル通知:
- (void) keyboardWillChangeFrame:(NSNotification*)notification {
NSDictionary* notificationInfo = [notification userInfo];
CGRect keyboardFrame = [[notificationInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
[UIView animateWithDuration:[[notificationInfo valueForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]
delay:0
options:[[notificationInfo valueForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]
animations:^{
CGRect frame = self.textViewContainer.frame;
frame.origin.y = keyboardFrame.origin.y - frame.size.height;
self.textViewContainer.frame = frame;
} completion:nil];
}
frame.origin.y...
正しい計算を行うには、行をいくつか調整する必要がある場合があります。UITabBarController
下部にバーがあるかどうかはわかりません。ここで最も安全な方法は次のとおりです。
frame.origin.y = self.view.frame.size.height - keyboardFrame.size.height - X;
X
VC が画面全体をカバーする場合は 0 です。そうでない場合は、下のバーの高さを使用します。