Swift UITableViewAutomaticDimension无法正常工作

时间:2017-03-23 08:24:33

标签: swift uitableview

我的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,但它仍显示近一半的单元格宽度

enter image description here

4 个答案:

答案 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。。切记从表中调用重新加载以为要显示的每个单元格调用高度计算。