I have an UIImageView in storyboard which AspectRatio is 1:1, that I want to change to 2:1 programmatically in ViewController in some cases. I create reference of that constraint in ViewController but unable to set the constraint.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You can change constraint programmatically in swift 3
let aspectRatioConstraint = NSLayoutConstraint(item: self.YourImageObj,attribute: .height,relatedBy: .equal,toItem: self.YourImageObj,attribute: .width,multiplier: (2.0 / 1.0),constant: 0)
self.YourImageObj.addConstraint(aspectRatioConstraint)
回答2:
As it's stated in Apple's guide, there're three ways to set constraints programmatically:
- You can use layout anchors
- You can use the NSLayoutConstraint class
- You can use the Visual Format Language
The most convenient and fluent way to set constraints is using Layout Anchors.
It's just one line of code to change aspect ratio for your ImageView
imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor, multiplier: 1.0/2.0).isActive = true
To avoid "[LayoutConstraints] Unable to simultaneously satisfy constraints." you should add reference to your ImageView's height constraint then deactivate it:
heightConstraint.isActive = false
回答3:
Set the multiplier of the constraint to 0.5 or 2 depending on your constraint condition, It'll become 2:1