2014-12-02 88 views
0

我在UIViewController中有一个UITableView作为子视图。当用户按下tableView下的UITextfield时,当键盘出现时,我设置tableView的contentOffset。如果我像1点滚动(向上/向下),表格视图将它的contentOffset重置为默认值。我确定我没有将contentOffset重置为我的代码中的任何位置。为什么会发生? 下面的是我如何设置ContentOffset:UITableView在滚动时重置ContentOffset

CGRect keyboardEndFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

[_tableView setContentOffset:CGPointMake(0, keyboardEndFrame.size.height) animated:YES]; 
+0

你是否还将UITableView的底部填充设置为与键盘一样高?要么是这样,要么调整'UITableView'的大小,使它在键盘开始的地方结束......如果你不这样做,表格视图在技术上会被滚动传递到底部,所以用你的手指滚动它将导致它重置滚动位置... – jjv360 2014-12-02 14:13:06

+0

@ jjv360不,我不这样做。我如何添加底部填充? – HusseinB 2014-12-02 14:17:12

回答

2

要填充添加到一个UITableView这样,它的内容可以在键盘上方滚动,你可以做这样的事情:

-(void) keyboardMoved:(NSNotification*)notify { 

    // Get values 
    CGRect endFrame; 
    [[[notify userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&endFrame]; 
    endFrame = [self.view convertRect:endFrame fromView:nil]; 

    // Add padding 
    int inset = self.view.bounds.size.height - endFrame.origin.y; 
    tableView.contentInset = UIEdgeInsetsMake(0, 0, inset < 0 ? 0 : inset, 0); 
    tableView.scrollIndicatorInsets = tableView.contentInset; 

} 
+0

谢谢,它的工作!我想补充一点,如果在ViewController出现时隐藏了任何tabBar,我们应该在插入中添加44。 – HusseinB 2014-12-02 14:47:38

1

问题是你没有调整内容大小,基本上是这样的:

你有uiTableView,其大小为320 * 400,内容大小相同,显示键盘和设置内容偏移量,但不改变内容大小(I意味着你设置了不可抵消的抵消),th你开始滚动,并且你的表格滚动到它可能的偏移值,在这种情况下你需要增加内容大小。但对于tableView更好的是添加contentInset与计算底部插入。

+0

谢谢! Plus One +1 – HusseinB 2014-12-02 14:48:05