agazaur
agazaur

Reputation: 27

Problem with dynamic UITableView cell heights

I want my cells to have dynamic height. I use the below code:

let tableView: UITableView = {
        let view = UITableView()
        view.register(MyTableViewCell.self, forCellReuseIdentifier: MyTableViewCell.reuseIdentifier)
        view.rowHeight = UITableView.automaticDimension
        view.estimatedRowHeight = 150
        view.separatorStyle = .singleLine
        view.isScrollEnabled = true
        return view
    }()

The cell contains only label that is given one constraint- to be centered inside a cell:

private func setupView() {
        addSubview(titleLabel)
        titleLabel.snp.makeConstraints { maker in
            maker.center.equalToSuperview()
        }
    }

the label's definition:

let titleLabel: UILabel = {
        let label = UILabel()
        label.textColor = .black
        label.textAlignment = .center
        label.numberOfLines = 0
        return label
    }()

The label's text is then assigned in cellForRowAt method but in each case returns same hight even though the text is sometimes 4 lines and cell's hight should be stretched. What is there that I'm missing in the above code? Thanks

Upvotes: 0

Views: 39

Answers (2)

Slavenko Miljic
Slavenko Miljic

Reputation: 3856

The cell's content needs to have autolayout constraints setup in such way that there is constraint connection from the top to the bottom of the cell, for the automatic dimensions to work.

private func setupView() {
    addSubview(titleLabel)
    titleLabel.snp.makeConstraints { maker in
        maker.edges.equalToSuperview()

        //or add .top, .left, .right, .bottom constraints individually, 
        //if you need to add .offset() to each of the sides
    }
}

Upvotes: 0

Shehata Gamal
Shehata Gamal

Reputation: 100541

You should give the label top , bottom , leading and trailing constraints to make the height dynamic

Upvotes: 0

Related Questions