Невозможно удовлетворить нижнее ограничение UILabel для ContentView динамического UITableViewCell

Вы можете использовать Array.map

let a = [1, 2, 3];
let b = ["a", "b", "c"];
let c = a.map((v,i) => ({a:v, b: b[i]}));
console.log(c);

0
задан rmaddy 19 January 2019 в 21:16
поделиться

2 ответа

Хотя уже довольно поздно, я все равно публикую этот ответ . В большинстве случаев вам не нужно переустанавливать свои ограничения и повторно добавлять ваши подпредставления в ваше представление super / parent. Таким образом, ваши setUpViews() и setUpConstraints() должны быть действительно внутри override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?), например, так:

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    setUpViews()
    setUpConstraints()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Кроме того, вам не нужно (в большинстве случаев, опять же), по крайней мере для меня, установить приоритеты для ваших ограничений. По мере возможности решайте проблемы / предупреждения об ограничениях без снижения приоритетов.

badLabel.layoutIfNeeded() тоже не нужно, если только вы на самом деле не изменяете некоторые константы своих ограничений или не перестраиваете свое ограничение. Хорошо, имеет смысл использовать такую ​​строку, если вы ДЕЙСТВИТЕЛЬНО хотите настроить все в вашем layoutSubviews()

Весь этот класс, похожий на вашу ячейку, работал для меня:

class BadCustomTableViewCell: UITableViewCell {
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        setUpViews()
        setUpConstraints()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    let badLabel:UILabel = {
        let label = UILabel()
        label.font = UIFont.systemFont(ofSize: 40, weight: UIFont.Weight.light)
        label.text = "899"
        label.textColor = .black
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    }()

    func setUpViews() {
        contentView.addSubview(badLabel)
    }

    func setUpConstraints() {
        badLabel.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
        let safeMargin:CGFloat = badLabel.frame.size.width - 15
        badLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: -safeMargin).isActive = true
        badLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: safeMargin).isActive = true
    }
}
0
ответ дан Glenn 19 January 2019 в 21:16
поделиться

Опустите нижнее ограничение

let con = badLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -safeMargin)  
con.priority = UILayoutPriority(999)
con.isActive = true

и добавьте настройки & amp; ограничения внутри

override init(style: UITableViewCell.CellStyle,reuseIdentifier: String?)

как

override func layoutSubviews() 

называются несколько раз `

0
ответ дан Sh_Khan 19 January 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: