我有一个自定义UITableViewCell
,其中包含对象(例如UILabel
,UITextView
,UITextField
等。选中某个按钮后,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
一直向上滚动一秒,然后滚动回到位置。
答案 0 :(得分:0)
它缩小的原因是,你必须实现heightForRowAtIndexPath
的方法。
现在唯一的问题是tableView
跳起来然后滚动到位置。不知道为什么。
答案 1 :(得分:0)
您的目标是否仅在iOS 8及更高版本上运行?如果是,您可以设置self.tableView.rowHeight = UITableViewAutomaticDimension
为您的单元格启用Autolayout。然后,您也不需要实现委托tableView:heightForRowAtIndexPath:
。
如果您已经这样做了,那么您的问题可能在于自定义单元格。也许它的约束没有明确定义?你如何初始化单元格的约束?
另一个想法是在tableView:cellForRowAtIndexPath:
中手动触发布局传递。在单元格初始化并设置了文本标签值后,请调用:
[cell setNeedsLayout];
[cell layoutIfNeeded];