如何动态调整TableView单元格高度和TableView高度的大小

时间:2018-12-24 11:31:34

标签: ios swift uitableview

我有一个包含两个单元格的tableview,tableview单元格的内容将改变并且是动态的,因此我想动态调整tableview单元格的大小,并根据tableview单元格的高度来计算tableview的高度。 我的表格视图在渲染单元格时占用了额外的空间。

任何人都可以帮助我解决如何根据表格视图单元格高度设置表格视图高度的方法

class Recent_WH_acitivityCell: UITableViewCell {

@IBOutlet weak var wh_activity_tableView: UITableView!
@IBOutlet weak var wh_activity_table_ht: NSLayoutConstraint!

let cells = 2
var maxHeight: CGFloat = UIScreen.main.bounds.size.height
override func awakeFromNib() {
    super.awakeFromNib()
    wh_activity_tableView.estimatedRowHeight = 100
    wh_activity_tableView.rowHeight = UITableViewAutomaticDimension
}

func setData()
{
    wh_activity_tableView.reloadData()
    self.layoutIfNeeded()
}

override var intrinsicContentSize: CGSize
{
    let height = min(self.contentView.frame.height, maxHeight)
    return CGSize(width: self.contentView.frame.width, height: height)
}
override func layoutSubviews() {
    super.layoutSubviews()
    self.contentView.frame = UIEdgeInsetsInsetRect(contentView.frame, UIEdgeInsets(top: 0, left: 0, bottom: 15, right: 0))
}}

extension Recent_WH_acitivityCell : UITableViewDataSource{

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "recent_wh_data_cell", for: indexPath) as! Recent_WH_Data_cell
        return cell
    }
}

以下是屏幕截图

请查看突出显示的部分。

enter image description here

2 个答案:

答案 0 :(得分:0)

将约束分配给父视图的顶部和底部。然后使用一个调用作为标题单元格(如“出售您的股票”)并将该单元格用作本节下的普通单元格,这样您就可以根据需要获得适当的输出。

还要分配高度约束并将其分配给IBOutlet并计算单元格数*单元格高度+标头高度=表格视图高度约束

然后相应地设置UIScrollview contentsize

例如,一个单元格高度为80,单元格数为5,则scrollview内容大小为=其他项目高度+标头高度+(80 * 5) tableview的高度限制为=标头高度+(80 * 5)

答案 1 :(得分:0)

您可以像这样实现自定义大小UITableView

class SelfSizingTableView: UITableView {

    override var intrinsicContentSize: CGSize {
        return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)
    }

    override var contentSize: CGSize {
        didSet {
            invalidateIntrinsicContentSize()
        }
    }

}

确保正确设置单元格的约束(从单元格的顶部到底部的完全约束),并在视图控制器中启用自调整大小的单元格,如下所示:

@IBOutlet weak var tableView: UITableView! {
    didSet {
        tableView.estimatedRowHeight = 44
        tableView.rowHeight = UITableView.automaticDimension
    }
}