У меня есть представление с двумя ведущими ограничениями, которые противоречат друг другу. Один с начальным смещением, другой без. Свойство «константа» работает для активного ограничения. Но я хочу включить/отключить ограничения в соответствии со своими потребностями. Он работает везде, кроме UITableViewCell
, когда вызывается из tableView:cellForRowAtIndexPath:
. Вот моя ячейка:
class WowCell: UITableViewCell {
@IBOutlet weak var myView: UIView!
@IBOutlet var leading: NSLayoutConstraint!
@IBOutlet var leadingSpace: NSLayoutConstraint!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func setup(ye:Bool) {
setActiveConstraint(ye: ye)
//doesn't help
setNeedsLayout()
layoutIfNeeded()
needsUpdateConstraints()
setNeedsUpdateConstraints()
needsUpdateConstraints()
setNeedsLayout()
setNeedsDisplay()
}
func setActiveConstraint(ye:Bool){
leading.isActive = !ye
leadingSpace.isActive = ye
}
override func layoutSubviews() {
//when called from here, it does work
}
}
заранее спасибо
Редактировать: как посоветовал Прашант Тукадия, это работает путем изменения приоритетов обоих активных ограничений. Но имейте в виду, что оба ограничения должны быть ниже 1000.
func setActiveConstraint(ye:Bool){
leading.priority = UILayoutPriority(rawValue: !ye ? 999 : 250)
leadingSpace.priority = UILayoutPriority(rawValue: ye ? 999 : 250)
}