编辑视图框和原点后,UITableView不会滚动

时间:2009-12-03 20:10:24

标签: iphone uitableview keyboard scroll uitextview

我正在尝试在表格视图底部的表格单元格中实现UITextView。

我已经尝试过这里的建议Making a UITableView scroll when text field is selected以及其他解决方案,但它们有点不同,因为我必须人为地为当前视图添加额外的高度,以便为键盘创建空间。

以下是我在上一个解决方案中添加的内容,以便将其移植到我的应用程序中。

-(void) keyboardWillShow:(NSNotification *)note {
      CGRect frame = self.view.frame;
      frame.size.height += keyboardHeight;
      frame.origin.y -= keyboardHeight;
        self.view.frame = frame;
}

-(void) keyboardWillHide:(NSNotification *)note
{
        CGRect frame = self.view.frame;
        frame.size.height -= keyboardHeight;
    frame.origin.y += keyboardHeight;

}

这样做会正确地向视图添加高度并滚动到单元格,但在恢复原始视图的高度后,滚动超出当前可见视图变得不可能,即使边界外有有效内容(我看到滚动条弹回之前的文本视图。) 如果我尝试在keyboardWillShow中保存tableview的框架或边界(而不是视图)并在keyboardWillHide中恢复它们,则会恢复滚动,但视图将减少一半。

除了对视图底部的额外高度进行硬编码外,是否有任何补救措施?

1 个答案:

答案 0 :(得分:3)

通过删除编辑视图原点的代码,我能够解决锁定滚动的问题。另外,我在计算中使用tableview的contentSize属性实现了向底部单元格的滚动。

-(void) keyboardWillShow:(NSNotification *)note
{

  if(!isKeyboardShowing)
    {
    isKeyboardShowing = YES;
    CGRect keyboardBounds;
    [[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keyboardBounds];
    CGFloat keyboardHeight = keyboardBounds.size.height;

            CGRect frame = self.view.frame;
            frame.size.height += keyboardHeight;
            self.view.frame = frame;

    CGPoint scrollPoint = frame.origin;
    scrollPoint.y += _tableView.contentSize.height - keyboardHeight;
    [_tableView setContentOffset:scrollPoint animated:YES];
    }
}