UITableView 的 contentSize 何时设置?

When does a UITableView#39;s contentSize get set?(UITableView 的 contentSize 何时设置?)
本文介绍了UITableView 的 contentSize 何时设置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我在 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 添加一行时,我在 UITableView 上调用 insertRowsAtIndexPaths:withRowAnimation:.然后我调用一个方法来调整 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:

Objective-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 何时设置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Hardware Volume buttons change in app volume(硬件音量按钮更改应用程序音量)
Resume game cocos2d(恢复游戏 cocos2d)
Cocos2D + Disabling only Retina iPad Graphics(Cocos2D + 仅禁用 Retina iPad 图形)
[ios.cocos2d+box2d]how to disable auto-rotation?([ios.cocos2d+box2d]如何禁用自动旋转?)
Storing and reading files from Documents directory iOS 5(从 Documents 目录存储和读取文件 iOS 5)
How can I implement a virtual joystick for a cocos2d game outside the cocos2d environment?(如何在 cocos2d 环境之外实现 cocos2d 游戏的虚拟摇杆?)