我有一个包含可变数量的部分和自定义单元格的表格视图。在某些情况下,单元格可能会在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()绑定到表的旧内容大小 - 即使在重新加载行之后也是如此。我尝试通过提供新的内容大小和计算出的高度差来解决这个问题。这确实有效,但对我来说真的很讨厌。
有没有更清洁的方法来做事?
提前致谢
答案 0 :(得分:7)
取而代之的是:
tableView.ScrollRectToVisible(_: animated: )
用它将 UITableView 滚动到底行:
tableView.scrollToRow(at: at: animated: )