我的Swift项目中有一个像这样的表
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
,但它仍显示近一半的单元格宽度
答案 0 :(得分:1)
您需要固有的单元格大小才能工作。完全删除heightForRowAt
。单元格中的约束应该确定单元格大小,这意味着您的约束应该至少从顶部和底部固定。设置rowHeight
后添加以下代码:
tableView.estimatedRowHeight = 250
答案 1 :(得分:1)
您必须删除-heightForRow
方法,并在表格视图中设置estimatedRowHeight
estimatedRowHeight
用于计算电视的条形尺寸等,因此它应该是尽可能接近表格视图单元格高度的平均大小的实际值。
现在,如果您使用自动布局并且约束设置正确,您应该会看到UITableViewCell
的正确大小调整。要正确设置TVC内部的约束,您应该考虑将它们放置在可以控制单元格大小的位置
例如,假设您的TVC只有一个标签,并且该标签在其超级视图上附加了4个约束:顶部,底部,尾随和前导,具有固定的常量大小。 UILabel
实例也将numberOfLines设置为0(表示它可以展开以填充所有文本)。
当autolayout引擎开始请求标签intrinsicContentSize时,标签将返回一个适合所有文本的值,superview大小将根据该值更改大小。
如果您像以前一样将TVC固定到特定高度,则TVC无法自我扩展。
答案 2 :(得分:0)
我遇到了限制问题,所以这就是我所做的 首先我添加了heightForRowAt
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
然后我创建了一个变量
let tableViewHeight = postTexts.count*100
并把它放在我的身高限制
中 tableView.anchor(PostsDiv.bottomAnchor, left:view.leftAnchor, bottom: nil, right: view.rightAnchor, topConstant: 40, leftConstant: 15, bottomConstant: 0, rightConstant: 15, widthConstant: 0,heightConstant: CGFloat(tableViewHeight))
它对我来说效果很好
答案 3 :(得分:0)
将视图的约束固定到超级视图的边缘。还要调用estimatedRowHeight。。切记从表中调用重新加载以为要显示的每个单元格调用高度计算。