问题描述
我的 Swift 项目中有一张像这样的表
I have got a table in my Swift project like this
var tableView: UITableView!
tableView = UITableView()
tableView.dataSource = self
tableView.delegate = self
tableView.rowHeight = UITableViewAutomaticDimension
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return postTexts.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 250;
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 5
}
我希望我的 tableview 的高度是自动的,因此我使用了UITableViewAutomaticDimension
,但它仍然显示近一半的单元格宽度
I wanted my tableview's height to be automatic thus i used UITableViewAutomaticDimension
,but it is still showing nearly half of the cells width
推荐答案
您必须删除 -heightForRow
方法并在 table view 上设置 estimatedRowHeight
.estimatedRowHeight
用于计算 TV 的 bar 大小等,因此它应该是一个尽可能接近 table view cell 高度平均大小的真实值.
现在,如果您使用自动布局并且正确设置了约束,您应该会看到 UITableViewCell
的正确调整大小.要正确设置 TVC 内的约束,您应该考虑以一种可以控制单元格大小的方式放置它们.
例如,假设您的 TVC 只有一个标签,并且该标签有 4 个附加到其超视图的约束:顶部、底部、尾随和前导,具有固定的恒定大小.UILabel
实例还将 numberOfLines 设置为 0(意味着它可以扩展以填充您的所有文本).
当自动布局引擎开始请求标签内在内容大小时,标签将返回一个适合您所有文本的值,超级视图大小将根据此更改大小.
如果像以前一样将 TVC 固定到特定高度,则 TVC 无法自行展开.
You must delete the -heightForRow
method and set on the table view an estimatedRowHeight
.
The estimatedRowHeight
is used to calculate the bar size etc of the TV, so it should be a real value closest as possible to an average size of the table view cell height.
Now, if you are using auto layout and constraints are set correctly you should see a correct resize of your UITableViewCell
. To set correctly the constraints inside the TVC you should think to place them in a way that they can control the size of your cell.
For instance say that your TVC has just one label and that label has 4 constraints attached to its superview: top, bottom, trailing and leading with a fixed constant size. The UILabel
instance has also the numberOfLines set to 0 (means that it can expand to fill all your text).
When the autolayout engine starts to request the label intrinsicContentSize, the label will return a value that will fit all your text, the superview size will change the size according to that.
If you fix the TVC to a specific height as you did before, the TVC can't expand itself.
这篇关于Swift UITableViewAutomaticDimension 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!