【问题标题】:UITableView reset ContentOffset when scrollingUITableView 在滚动时重置 ContentOffset
【发布时间】:2014-12-02 14:06:17
【问题描述】:

我在 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];

【问题讨论】:

  • 您是否也将UITableView 的底部填充设置为与键盘一样高?要么这样,要么调整UITableView 的大小,使其在键盘开始的地方结束......如果你不这样做,表格视图将在技术上滚动通过它的底部,所以用手指滚动它会导致它重置滚动位置...
  • @jjv360 不,我不这样做。如何添加底部填充?

标签: ios objective-c uitableview


【解决方案1】:

要向 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;

}

【讨论】:

  • 谢谢,它正在工作!我想补充一点,如果 ViewController 出现时有隐藏的 tabBar,我们应该在 inset 中添加 44。
【解决方案2】:

问题是你没有调整内容大小,基本上例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多