UITableView.ScrollRectToVisible()不会滚动到底部

时间:2011-04-13 08:39:18

标签: uitableview scroll xamarin.ios

我有一个包含可变数量的部分和自定义单元格的表格视图。在某些情况下,单元格可能会在RowSelected()内调整大小。每当发生这种情况时,我还要确保在调整大小(放大)后单元格完全可见。

我在另一个表中工作,只修改基础数据,以便表视图源提供更大的单元格。然后我重新加载单元格并将其滚动显示如下:

// Modify data
//...

// Reload cell
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.None);
tableView.ScrollRectToVisible(tableView.CellAt(indexPath).Frame, true);

问题出现在表视图中,其中调整大小不仅可以由RowSelected()触发,还可以由单元格内UI元素上的事件触发。

然后事件调用方法重新加载单元格:

void updateCell() {
  if (cell.Superview != null) {
    UITableView tableView = (UITableView)cell.Superview;
    tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.None);

    // Get the new (possibly enlarged) frame
    RectangleF frame = tableView.CellAt(indexPath).Frame;
    Console.WriteLine("This really is the new large frame, height: {0}", frame.Height);

    // Try to scroll it visible
    tableView.ScrollRectToVisible(frame, true);
  }
}

这适用于所有细胞,但最底部。它只会使该单元格的旧框架可见。我仔细检查了它确实为ScrollRectToVisible()提供了新的单元格框架。

所以看起来ScrollRectToVisible()绑定到表的旧内容大小 - 即使在重新加载行之后也是如此。我尝试通过提供新的内容大小和计算出的高度差来解决这个问题。这确实有效,但对我来说真的很讨厌。

有没有更清洁的方法来做事?

提前致谢

1 个答案:

答案 0 :(得分:7)

取而代之的是:

tableView.ScrollRectToVisible(_: animated: )

用它将 UITableView 滚动到底行:

tableView.scrollToRow(at: at: animated: )