根据数据/单元格数更改TableView的高度锚点

时间:2019-10-22 05:53:30

标签: ios swift

如果有足够的数据,我一直在尝试将TableView的高度更改为全屏,否则使高度等于内容(因此无需滚动)。在下面的图片中,tableview的高度应在最后一个单元格处结束,但是您可以看到它在视图的底部。我不希望圆形视图的高度发生变化。 (我知道我的表视图的底部锚设置不正确,但是我的想法已经用完了

Here是当前输出

我尝试更改锚点的优先级,以及其他各种操作,但均未获得理想的结果。我尝试在tableview.reloadData()之后添加以下代码,但是这导致tableview的高度锚点太大,导致高度超出屏幕。

tableView.heightAnchor.constraint(equalToConstant: self.tableView.contentSize.height).isActive = true

任何帮助将不胜感激!谢谢

private func setupConstraint() {
        view.addSubview(tableView)
        view.addSubview(attendanceCircleView)

        NSLayoutConstraint.activate([
            attendanceCircleView.topAnchor.constraint(equalTo: view.topAnchor, constant: 10),
            attendanceCircleView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.95),
            attendanceCircleView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            attendanceCircleView.heightAnchor.constraint(equalToConstant: 240),
            tableView.topAnchor.constraint(equalTo: attendanceCircleView.bottomAnchor, constant: 10),
            tableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.95),
            tableView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20)
        ])
    }

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码。

@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint! // create a height Constraint of tableview 


  override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.reloadTableView()
    }

  func updateTableiewConstraints() {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.01, execute: {
            let height : CGFloat = self.tableView.contentSize.height
            self.tableViewHeightConstraint.constant = height
            UIView.animate(withDuration: 0.1, animations: {
                self.view.layoutIfNeeded()
            })
        })
    }

注意: 1.设置tableview的顶部约束应大于0。

  1. 将tableView高度限制的优先级设置降低为900。

答案 1 :(得分:0)

我通过以下操作解决了我的问题。

let tableViewBottomAnchor = tableView.bottomAnchor.constraint(equalTo:view.bottomAnchor, constant: -20)
tableViewBottomAnchor.priority = .defaultLow
tableViewBottomAnchor.isActive = true

并在调用tableView.reloadData()

之后计算高度约束
let tableViewMaxHeight = self.tableView.frame.height
let contentTableViewHeight = self.tableView.contentSize.height
let height = tableViewMaxHeight <= contentTableViewHeight ? tableViewMaxHeight: contentTableViewHeight
self.tableView.heightAnchor.constraint(equalToConstant:height).isActive = true
UIView.animate(withDuration: 0.1, animations: {
    self.view.layoutIfNeeded()
})