У меня есть представление с двумя ведущими ограничениями, которые конфликтуют друг с другом.Один с ведущим смещением, другой без.Свойство «константа» работает для активного ограничения.Но я хочу включить / отключить ограничения, чтобы соответствовать моим потребностям.Он работает в любом месте, кроме 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)
}