在indexPath处插入单元格,无法正常工作

时间:2015-03-20 18:11:57

标签: ios uitableview

我有一个自定义UITableViewCell,其中包含对象(例如UILabelUITextViewUITextField等。选中某个按钮后,cell会添加tableView

当我在模拟器上运行它,并且添加了单元格时,所有可见单元格和子视图高度都变得非常紧凑。 (我确实应用了自动约束。)

....
[[self myTableView] insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationTop];

如果我执行以下操作,则单元格恢复正常:

NSArray* visibleCellIndex = self.myTableView.indexPathsForVisibleItems;
[self.myTableView reloadRowsAtIndexPaths:visibleCellIndex withRowAnimation:UITableViewRowAnimationFade];
[self.myTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:savedScrollPosition inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

重新加载可见单元格的问题是:首先,这是一种解决方法,而不是问题的根源。其次,它不是一个功能齐全的解决方法,因为整个tableView一直向上滚动一秒,然后滚动回到位置。

2 个答案:

答案 0 :(得分:0)

它缩小的原因是,你必须实现heightForRowAtIndexPath的方法。

现在唯一的问题是tableView跳起来然后滚动到位置。不知道为什么。

答案 1 :(得分:0)

您的目标是否仅在iOS 8及更高版本上运行?如果是,您可以设置self.tableView.rowHeight = UITableViewAutomaticDimension为您的单元格启用Autolayout。然后,您也不需要实现委托tableView:heightForRowAtIndexPath:

如果您已经这样做了,那么您的问题可能在于自定义单元格。也许它的约束没有明确定义?你如何初始化单元格的约束?

另一个想法是在tableView:cellForRowAtIndexPath:中手动触发布局传递。在单元格初始化并设置了文本标签值后,请调用:

[cell setNeedsLayout];
[cell layoutIfNeeded];