TableView内容高度在键盘显示后更改

时间:2012-02-16 01:37:25

标签: iphone ios uitableview

我在底部有一个滚动视图,表格视图和文本字段,点击后会触发键盘显示。 表格视图只是滚动视图中的一个子视图,用于显示该照片的一些注释。

一开始,tableView高度显示正确。但是,在单击类中的任何textField后,tableView高度已更改。任何人都有解决方案。

我测试了键盘高度。它会影响UITableView的附加高度。 但我对如何保持高度与键盘显示之前的高度没有任何想法。

请帮忙。

以下是一些代码,

//---when a TextField view begins editing---
-(BOOL) textFieldDidBeginEditing:(UITextField *)textFieldView {  
        currentTextField = textFieldView;

        return YES;
}  

-(BOOL) textFieldShouldReturn:(UITextField *) textFieldView {  
    [textFieldView resignFirstResponder];
    return NO;
}

//---when a TextField view is done editing---
-(void) textFieldDidEndEditing:(UITextField *) textFieldView {  
    currentTextField = nil;
}

//---when the keyboard appears---
-(void) keyboardDidShow:(NSNotification *) notification {
    if (keyboardIsShown) return;

    NSDictionary* info = [notification userInfo];

    //---obtain the size of the keyboard---
    NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    //---resize the scroll view (with keyboard)---
    CGRect viewFrame = [v_comment_editor frame];
    viewFrame.size.height -= keyboardSize.height;
    v_comment_editor.frame = viewFrame;

    //---scroll to the current text field---
    CGRect textFieldRect = [currentTextField frame];
    [v_comment_editor scrollRectToVisible:textFieldRect animated:YES];

    keyboardIsShown = YES;
}

//---when the keyboard disappears---
-(void) keyboardDidHide:(NSNotification *) notification {
    NSDictionary* info = [notification userInfo];

    //---obtain the size of the keyboard---
    NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    //---resize the scroll view back to the original size (without keyboard)---
    CGRect viewFrame = [v_comment_editor frame];
    viewFrame.size.height += keyboardSize.height;
    v_comment_editor.frame = viewFrame;

    keyboardIsShown = NO;
}

-(void) viewWillDisappear:(BOOL)animated {
    //---removes the notifications for keyboard---
    [[NSNotificationCenter defaultCenter] 
     removeObserver:self 
     name:UIKeyboardWillShowNotification 
     object:nil];
    [[NSNotificationCenter defaultCenter] 
     removeObserver:self 
     name:UIKeyboardWillHideNotification 
     object:nil];
}

3 个答案:

答案 0 :(得分:0)

可能有助于查看UIScrollView's contentOffsetcontentInset属性。此外,它还有助于理解scrollView的boundsframe之间的区别。

我强烈建议您创建一个简单的测试项目并尝试上述概念。深入了解将使您的生活更轻松。

注意:请注意半透明导航栏及其对上述属性的影响。

答案 1 :(得分:0)

显示的代码会在显示键盘时调整视图大小。当键盘再次被隐藏时,它看起来应该恢复到正确的大小。

如果您对其中一个子视图有疑问,可能会以奇怪的方式设置自动调整大小的掩码。

最简单的方法是在处理类中有一个实例变量,如:

CGRect tableframe;

并在 keyboarddidshow 函数中将正确的帧存储到其中,并将表格恢复为** keyboardDidHide **方法中的原始帧。

答案 2 :(得分:0)

对于所有其他人的参考,如果您再次遇到此问题。

我以前解决的问题是在keyboardDidHide中重新调整大小,代码如下:

CGRect frame = tbl_comment.frame;
    frame.size.height = 145;
    tbl_comment.frame = frame;