UITableView在滚动时重置ContentOffset

时间:2014-12-02 14:06:17

标签: ios objective-c uitableview

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

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

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

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:1)

问题在于您没有调整内容大小,主要是例如:

你有uiTableView,其大小为320 * 400且内容大小相同,你显示键盘和设置内容偏移,但不是改变内容大小(我的意思是你设置不可取的偏移),而不是你开始滚动,你的表滚动对于它可行的偏移值,在这种情况下,您需要增加内容大小。但是对于tableView,更好的是添加带有计算底部插入的contentInset。