Cells in UITableView overlapping. Many cells in one place

♀尐吖头ヾ 提交于 2019-12-11 04:27:09

问题


I'm trying to make table view with random numbers of labels in. Everything is working till I try too scroll it. Than many some of cells appear in one place. It looks like this:

Screen from simulation

To make random row height in viewDidLoad() I put this:

tableView.estimatedRowHeight = 50.0
tableView.rowHeight = UITableViewAutomaticDimension

The code going to write randoms number of labels with random number of lines is here:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {   
    let cell = tableView.dequeueReusableCell(withIdentifier: "HarvestPlan", for: indexPath) as! HarvestPlanCell
    let currentSpecies = harvestPlan[indexPath.row]

    var kindLabels = [UILabel]()
    cell.kindsNamesView.bounds.size.width = 100
    for kind in currentSpecies.kinds {
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.numberOfLines = 0
        label.text = kind.fullName
        label.bounds.size.width = 100
        label.sizeToFit()
        label.bounds.size.width = 100
        cell.kindsNamesView.addSubview(label)
        kindLabels.append(label)
    }



    var previous: UILabel!

    for label in kindLabels {
        label.widthAnchor.constraint(equalToConstant: 100).isActive = true
        label.heightAnchor.constraint(equalToConstant: label.bounds.height).isActive = true
        label.leadingAnchor.constraint(equalTo: cell.kindsNamesView.leadingAnchor).isActive = true

        if previous == nil {
            label.topAnchor.constraint(equalTo: cell.kindsNamesView.topAnchor).isActive = true
        }

        if previous != nil {
            label.topAnchor.constraint(equalTo: previous.bottomAnchor).isActive = true
        }

        if label == kindLabels.last {
            label.bottomAnchor.constraint(equalTo: cell.kindsNamesView.bottomAnchor).isActive = true
        }

        previous = label
    }

    return cell

Someone have some idea how to repair it? I'm looking for answer since one week and I did't find anything about it...


回答1:


Thank you @Paulw11, prepareForReuse was this what I was looking for. If someone have similar problem, the answer is code below added to UITableViewCell:

override func prepareForReuse() {
    super.prepareForReuse()

    for view in kindsNames.subviews { //take all subviews from your view
        view.removeFromSuperview() //delete it from you view
    }
}

Cheers



来源:https://stackoverflow.com/questions/43155114/cells-in-uitableview-overlapping-many-cells-in-one-place

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!