UITableView 的 contentSize 什么时候设置? [英] When does a UITableView's contentSize get set?
问题描述
我在 UIScrollView
中有一个非滚动的 UITableView
.我将 UITableView
的帧大小设置为其内容大小.
I have a non scrolling UITableView
in a UIScrollView
. I set the frame size of the UITableView
to its content size.
当我向 UITableView
添加一行时,我调用 insertRowsAtIndexPaths:withRowAnimation
: 在 UITableView
上.然后我调用一个方法来调整 UITableView
的框架大小:
When I add a row to the UITableView
, I call insertRowsAtIndexPaths:withRowAnimation
: on the UITableView
. Then I call a method to resize the frame of the UITableView
:
- (void)resizeTableViewFrameHeight
{
// Table view does not scroll, so its frame height should be equal to its contentSize height
CGRect frame = self.tableView.frame;
frame.size = self.tableView.contentSize;
self.tableView.frame = frame;
}
contentSize
目前似乎还没有更新.如果我根据行数和节数手动计算上述方法中的框架,则该方法可以正常工作.
It seems though that the contentSize
hasn't been updated at this point. If I manually calculate the frame in the above method based on the number of rows and sections, then the method works properly.
我的问题是,我怎样才能让 UITableView
更新它的 contentSize
?我想我可以调用 reloadData
并且可能会这样做,但是当我只插入一个单元格时重新加载整个表格似乎效率低下.
My question is, how can I get the UITableView
to update its contentSize
? I suppose I could call reloadData
and that would probably do it, but it seems inefficient to reload the entire table when I'm just inserting one cell.
推荐答案
您可以通过在 UITableView
上调用 layoutIfNeeded
来让 UITableView 立即计算内容的大小.这将运行所有必要的计算来布局 UITableView
.
You can make the UITableView calculate the size of the content immediately by calling layoutIfNeeded
on the UITableView
. This will run all the necessary calculations to layout the UITableView
.
要放入可变大小容器视图的 UITableViewController
子类示例:
Example for a UITableViewController
subclass that you want to put in a container view with variable size:
目标 C
- (CGSize)preferredContentSize
{
// Force the table view to calculate its height
[self.tableView layoutIfNeeded];
return self.tableView.contentSize;
}
迅捷
override var preferredContentSize: CGSize {
get {
// Force the table view to calculate its height
self.tableView.layoutIfNeeded()
return self.tableView.contentSize
}
set {}
}
这篇关于UITableView 的 contentSize 什么时候设置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!