1

唯一のサブビューとして内部を含むカスタム継承UIViewクラスがあります。キーボードが表示されたときの通常の機能を模倣して、テーブルビューのとをキーボードの高さに調整しよUITableViewうとしています。これは、キーボードがカスタムクラス内から表示されたときに呼び出される私のメソッドです。UITableViewControllercontentInsetscrollIndicatorInsetsUIView

- (void)keyboardDidShow:(NSNotification*)notification
{
    NSDictionary* info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    _tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    _tableView.scrollIndicatorInsets = _tableView.contentInset;
}

これはある程度機能しますが、何らかの理由でキーボードがテーブルビューに10ピクセルほど重なっています。

キーボードのオーバーラップ

他の画面ジオメトリのいくつかを考慮に入れていないことと関係があると思いますが、それがどのようになるかわかりません。tableViewは画面の一番下まで伸びるので、キーボードの高さは正確に必要な高さにする必要があります。何か案は?

4

2 に答える 2

1

キーボードを考慮して、tableView.frame.size.heightを変更します。

キーボードが表示されている場合は高さを下げ、表示されていない場合は高さを上げます。

すべての可能性についてキーボードの高さを検討する場合は、これを参照してくださいhttp://www.idev101.com/code/User_Interface/sizes.html

contentInsetとscrollIndicatorInsetsを台無しにしないでください。frameSizeを設定するだけで、これらが自動的に処理されます。

これはあなたの方法がどうあるべきかです

- (void)keyboardDidShow:(NSNotification*)notification
{
    NSDictionary* info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    CGRect rect = _tableView.frame;
    rect.size.height = _tableView.frame.size.height - kbSize.height;
    _tableView.frame = rect;
}

- (void)keyboardWillHide:(NSNotification*)notification
{
    NSDictionary* info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    CGRect rect = _tableView.frame;
    rect.size.height = _tableView.frame.size.height + kbSize.height;
    _tableView.frame = rect;
}

私はこのコードを同様の機能に使用しました。それでも機能しない場合は、他に問題が発生しています。

于 2012-12-16T21:46:19.647 に答える