Мне нужно показать некоторые UIView в моей ячейке, но размер этого UIView (backView
) отличается для каждой ячейки.Поэтому мне нужно также изменить высоту этой ячейки.
Я пытаюсь изменить высоту и ширину этого backView
во время выполнения, но все, что я получаю, это куча ошибок Autolayout, подобных этой:
[LayoutConstraints] Невозможно одновременно удовлетворить ограничения.Попытка восстановления путем нарушения ограничения ...
Я создал класс SimpleTextCell для этой ячейки, и его init выглядит так:
self.backView = UIView()
self.backView.translatesAutoresizingMaskIntoConstraints = false
self.backView.backgroundColor = UIColor.yellow
self.backView.layer.cornerRadius = 8.0
self.contentView.addSubview(backView)
let constraintBackViewTop = NSLayoutConstraint(item: backView, attribute: .top, relatedBy: .equal, toItem: contentView, attribute: .topMargin, multiplier: 1.0, constant: -5)
let constraintBackViewBottom = NSLayoutConstraint(item: backView, attribute: .bottom, relatedBy: .equal, toItem: contentView, attribute: .bottomMargin, multiplier: 1.0, constant: 5)
let constraintBackViewLeft = NSLayoutConstraint(item: backView, attribute: .left, relatedBy: .equal, toItem: contentView, attribute: .leftMargin, multiplier: 1.0, constant: 0)
constraintBackHeight = NSLayoutConstraint(item: backView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: superHeight)
constraintBackWidth = NSLayoutConstraint(item: backView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: superWidth)
self.contentView.addConstraints([constraintBackViewTop, constraintBackViewBottom, constraintBackViewLeft, constraintBackHeight, constraintBackWidth])
superHeight
и superWidth
здесь приведены только некоторые значения по умолчанию.
Моя cellForRowAt
функция выглядит так:
let cell = tableView.dequeueReusableCell(withIdentifier: "simpleTextCell", for: indexPath) as! SimpleTextCell
cell.selectionStyle = .none
cell.backgroundColor = UIColor.red
cell.constraintBackHeight.constant = 100
cell.constraintBackWidth.constant = 200
cell.updateConstraints()
И она вообще не работает.У меня есть ошибки (вроде того, что я упоминал ранее), и хотя высота моей ячейки довольно правильная, мой backView
невидим, потому что ширина backView.frame
равна нулю (я понятия не имею, почему)и высота backView
равна 100 (то же самое).Кажется, что мои новые ограничения игнорируются.
Я пытался установить приоритет для этих ограничений в cellForRowAt
:
cell.constraintBackHeight.priority = UILayoutPriority.init(rawValue: 999)
В результате возникает ошибка времени выполнения.
Я пытался преодолеть эту ошибку примерно так:
cell.constraintBackHeight.isActive = false
cell.constraintBackHeight.priority = UILayoutPriority.init(rawValue: 999)
cell.constraintBackHeight.isActive = true
, но она тоже не работает.
Как я могу это исправить?