My code below declares layout constraints in viewdidload. When the function Selena is called I would like the the constraints to be change to what is in the function selena. When I call the function the object I does not change. It has no effect. I know somehow I have to deactivate the original constraints.
override func viewDidLoad() {
NSLayoutConstraint.activate ([
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200),
i.widthAnchor.constraint(equalToConstant: 300),
i.heightAnchor.constraint(equalToConstant: 450),
])
}
@objc func selena(){
NSLayoutConstraint.activate ([
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :50),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -50),
i.widthAnchor.constraint(equalToConstant: 20),
i.heightAnchor.constraint(equalToConstant: 450),
])
}
You can hold a reference to them then use deactivate
var oldCons = [NSLayoutConstraint]()
override func viewDidLoad() {
super.viewDidLoad()
oldCons = [
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200),
i.widthAnchor.constraint(equalToConstant: 300),
i.heightAnchor.constraint(equalToConstant: 450)
]
NSLayoutConstraint.activate(oldCons)
}
@objc func selena(){
NSLayoutConstraint.deactivate(oldCons)
NSLayoutConstraint.activate ([
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :50),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -50),
i.widthAnchor.constraint(equalToConstant: 20),
i.heightAnchor.constraint(equalToConstant: 450)
])
}
height connstraint didn't change you can get it out of the array inside viewDidLoad
i.heightAnchor.constraint(equalToConstant: 450).isActive = true
and remove it from selena
function