2009-12-03 78 views
0

我试图在表格视图底部的表格单元格中实现UITextView。编辑视图框架和原点后,UITableView不会滚动

我已经尝试了这里的建议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中恢复它们,滚动将被恢复,但视图将被减半。

除了硬编码视图底部的附加高度之外,是否还有任何补救措施?

回答

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]; 
    } 
}