UISearchBarから呼び出されたキーボードにaccessoryViewを追加したいと思います。UISearchBarはこのプロパティを実装していないため、toolBarを作成しました。この件に関するAppleのドキュメントに従って、私は通知センターを使用して、キーボードがいつ呼び出されたかを知るだけでなく、向きによって変わるキーボードのサイズも知ることにしました。
ドキュメントの例に従い、keyboardWasShown
メソッドで、キーボードの上部にツールバーを表示するアニメーションを呼び出します。このようなもの:
-(void)keyboardWasShown:(NSNotification*)aNotification {
NSDictionary *info=[aNotification userInfo];
CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"width: %.1f; height: %.1f", keyboardSize.width, keyboardSize.height );
[self showAccessoryView:keyboardSize.height];
}
そして、アニメーションでは、ツールバーのフレームを次のように設定しました。
self.auxiliaryKeyboardBar.frame=CGRectMake(0, self.view.frame.size.height-(44+kbh), self.view.frame.size.width, 44);
ここで、44はツールバーの静的な高さであり、kbhは上記のメソッドから渡されたkeyboard.size.heigthです。
私が観察している問題は、userInfo
辞書で指定されたキーボードのサイズが常に縦向きを参照していることです。したがって、縦向きのNSLogは次のとおりです。
width: 320.0; heigth: 216.0
、大丈夫です
しかし、向きを横向きに変更してキーボードを呼び出すと、NSLogは次のようになります。
width: 162.0; heigth: 480.0
、ツールバーをスコープ外にします。
そのため、アニメーションを呼び出す前に、次のような条件を追加することになりました。
if ([self deviceIsPortrait]==YES) {
[self showAccessoryView:keyboardSize.height];
}else if ([self deviceIsPortrait]==NO) {
[self showAccessoryView:keyboardSize.width];
}
キーボードの高さ(フロートとして)への依存を避けるためにAppleの例に正確に従っているので、何か間違ったことをしているのかどうか疑問に思っています。とにかく条件付きの向きを追加する必要がありました。
何が起きてる?