根据表格视图的单元格内容动态调整高度,使其适合滚动视图

时间:2019-12-26 09:02:22

标签: swift uitableview

我想在ScrollView中容纳UIView和Tableview,但是表视图的高度并没有根据可用单元格动态增加。

我所做的是。

  1. 将TableView高度常量和优先级赋予999
  2. 制作表格视图高度内容的出口并添加此代码
 self.tableViewHeightConstraint.constant = self.myNewTableView.contentSize.height
 self.view.layoutIfNeeded()
  1. 使tablview滚动到false

但是TableView Height并没有根据单元格增加

Here是“我的代码”的示例代码。

TableviewCell:-

import UIKit

class NewTableViewCell: UITableViewCell {

    @IBOutlet weak var testLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

ViewController:-

import UIKit

class NewViewViewController: UIViewController {

    @IBOutlet weak var myNewTableView: UITableView!
    @IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()

        myNewTableView.rowHeight = 60
        myNewTableView.estimatedRowHeight = UITableView.automaticDimension

    }


    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

    }

}

extension NewViewViewController:UITableViewDelegate,UITableViewDataSource{


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "NewTableViewCell", for: indexPath) as! NewTableViewCell
        cell.testLabel.text = "Testing the height of tableview"

        self.tableViewHeightConstraint.constant = self.myNewTableView.contentSize.height
        self.view.layoutIfNeeded()

        return cell
    }


}

3 个答案:

答案 0 :(得分:1)

您需要在此处添加

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.tableViewHeightConstraint.constant = self.myNewTableView.contentSize.height
    self.view.layoutIfNeeded()
}

答案 1 :(得分:1)

您的self.tableViewHeightConstraint未连接到情节提要tableView。我认为您在StoryBoard中误将其删除。连接此约束后,它可以正常工作。请检查以下附件。

enter image description here

此更改后输出:-

enter image description here

答案 2 :(得分:0)

我认为以下代码将为您提供帮助。

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    self.YOUR_TABLEVIEW.layoutIfNeeded()
    self.YOUR_TABLEVIEW_HEIGHTCONSTRAINT.constant = self.YOUR_TABLEVIEW.contentSize.height
}