2011-04-13 199 views
1

我有一个表视图包含可变数量的部分和自定义单元格。在某些情况下,单元格可能会在RowSelected()中调整大小。每当发生这种情况时,我想确保在调整大小(放大)之后单元格完全可见。UITableView.ScrollRectToVisible()不滚动到底部

我在另一个表中工作,只是修改底层数据,以便表视图源将提供更大的单元格。然后我重新加载细胞和滚动它可见像这样:

// 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

可能dublicate http://stackoverflow.com/questions/594181/uitableview-and-keyboard-scrolling-problem – 2011-04-13 08:42:08

+0

你可以请你分享一下你的代码吗?我期待只显示3个单元格,每当用户滚动如果滚动在两者之间结束,而不是显示切割单元,我想显示完整的单元格,检查附近的单元格索引。对此有何建议? – 2011-11-08 04:51:01

回答

7

而不是使用这样的:

tableView.ScrollRectToVisible(_: animated:) 

用它来滚动的UITableView到下排:

tableView.scrollToRow(at: at: animated:)