Хотя уже довольно поздно, я все равно отправляю этот ответ . В большинстве случаев вам не нужно переустанавливать свои ограничения и повторно добавлять ваши подпредставления в ваше представление 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
}
}