AutoLayoutのMultiplierの制約を、IBOutletで接続して、プログラム側から変更したりできないか調べた。
が、multiplierを直接変更するようなやり方は存在しなかった。
しかし、代替策でやりたかったことは実現できた。
例えば、実現したい制約が、限られている場合は、複数の制約を設定して、設定した制約をIBOutlet接続して、
NSLayoutConstraintのisActiveプロパティを変更して制約を切り替えれば良い。
isActiveをfalseにすると、参照がなくなってしまうようなので、強参照にしておく。(weakをつけない。)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class ViewController: UIViewController { //実現したい制約1(強参照しておく) @IBOutlet fileprivate var widthMultiplier1: NSLayoutConstraint! //実現したい制約2(強参照しておく) @IBOutlet fileprivate var widthMultiplier2: NSLayoutConstraint! //制約を切り替える。 func update() { self.widthMultiplier1.isActive = false self.widthMultiplier2.isActive = true } } |
コメント