UITableView.ScrollRectToVisible()不';不要滚动到底部

UITableView.ScrollRectToVisible()不';不要滚动到底部,uitableview,scroll,xamarin.ios,Uitableview,Scroll,Xamarin.ios,我有一个表视图,其中包含可变数量的节和自定义单元格。在某些情况下,单元格可能会在RowSelected()内调整大小。每当发生这种情况时,我还要确保单元格在调整大小(放大)后完全可见 我在另一个表中工作,它只是修改底层数据,以便表视图源提供更大的单元格。然后,我重新加载单元格并将其滚动显示,如下所示: // Modify data //... // Reload cell tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITable

我有一个表视图,其中包含可变数量的节和自定义单元格。在某些情况下,单元格可能会在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()似乎绑定到表的旧内容大小,即使在重新加载行之后也是如此。我试图通过提供一个新的内容大小和计算出的高度差来解决这个问题。那确实管用,但我觉得真的很不舒服

有没有更干净的方法

提前感谢

请改用以下方法:

tableView.ScrollRectToVisible(_: animated: )
使用它可将UITableView滚动至最下面一行:

tableView.scrollToRow(at: at: animated: )
相反,使用以下方法:

tableView.ScrollRectToVisible(_: animated: )
使用它可将UITableView滚动至最下面一行:

tableView.scrollToRow(at: at: animated: )

你能分享你的代码吗?每当用户滚动talbe时,我只想显示3个单元格,如果滚动在两个单元格之间结束,我想显示完整的单元格,而不是剪切单元格,检查附近的单元格索引。对此有什么建议吗?可能有问题。请分享您的代码。每当用户滚动talbe时,我希望只显示3个单元格,如果滚动在这两个单元格之间结束,而不是显示剪切单元格,我希望显示完整的单元格,检查附近的单元格索引。对此有什么建议吗?