从问题的答案看来只是reloadData
。
此方法启动使tableview从tableview从numberOfSections
重新加载数据到-cellForRowAtIndexPath
的过程。
事实是,大多数这些方法可能在下一个runloop或CATransaction
中启动
我正在尝试获取tableview的全部大小以显示所有单元格,从而避免滚动的需要
只有在加载heightForRowAtIndexPath或单元格时,tableView才知道其内容大小,因此在contentSize
之后似乎无法向表视图询问其-reloadData
。
似乎无效的是使其内在内容大小无效并强制自动布局,或者询问 - sizeToFit
,直到它加载它不知道其大小的所有单元格。也尝试+systemLayoutSizeFittingSize:
,UILayoutFittingExpandedSize
没有成功。
答案 0 :(得分:0)
表格和集合视图的重点在于,不必须一次加载所有数据,但要回收UI元素并仅加载可见的内容。这就是datasource
方法的目的。
要在最后添加项目,只需更改您的数据源,以便再从numberOfRowsInSection
或numberOfItemsInSection
返回一个。确保您的数据源还具有填充此数据点的内容。
然后,您可以reloadRowsAtIndexPaths:
,reloadItemsAtIndexPaths:
reloadSections:
等数据源协议的方法重新加载这些数据点,但如果它们不可见,甚至可能不需要。
另一方面,如果您有自定义UIScrollView
,则您的数据源应具有单元格/子视图的高度或宽度。然后,您可以轻松计算要添加的任何新子视图的位置。
答案 1 :(得分:0)
如果您希望获得tableView的正确内容大小,则可以使用heightForRowAtIndexPath:
自行计算。
例如。如果单元格的高度是静态的,即它永远不会改变,那么只需将行数增加到该高度即可。否则,如果您的单元格高度是动态的,那么您可以执行以下操作:
- (CGSize)tableViewContentSize
{
CGFloat contentHeight = 0;
for (int i = 0; i < numberOfSections; i++) {
for (int k = 0; k < numberOfRows; k++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:k inSection:i];
contentHeight += [self tableView:self.tableView heightForRowAtIndexPath:indexPath];
}
}
CGSize contentSize = CGSizeMake(self.tableView.frame.size.width, contentHeight);
return contentSize;
}