![](/img/trans.png)
[英]NSLayoutConstraints and setting the width/height of a view dynamically
[英]Width and Height NSLayoutConstraints on UIImageView not working
我在视图控制器的updateViewConstraints()
的UIImgeView实例上设置了.Width和.Top NSLayoutConstraints。 在XCode可视调试器中,我可以看到约束实际上已设置,但是由于某些原因,约束没有被使用(?),它们显示为un(内容大小),并且显示为灰色。 当我使用NSLog输出约束时,我也可以看到它们已设置,但是以某种方式图像保持原始大小...这是什么意思?
constraints in parent: [<NSLayoutConstraint:0x7b379590 UIImageView:0x7af897b0.centerX == UIView:0x7b37d2e0.centerX>,
<NSLayoutConstraint:0x7b36e3d0 V:|-(0)-[UIImageView:0x7af897b0] (Names: '|':UIView:0x7b37d2e0 )>]
constraints in view: [<NSContentSizeLayoutConstraint:0x7ae892b0 H:[UIImageView:0x7af897b0(301)] Hug:251 CompressionResistance:750>,
<NSContentSizeLayoutConstraint:0x7ae834e0 V:[UIImageView:0x7af897b0(365)] Hug:251 CompressionResistance:750>]
设置约束的代码:
/// Image view with the character + ellipse
@IBOutlet weak var charImageView: UIImageView!
override func updateViewConstraints() {
super.updateViewConstraints()
charImageView.widthLayoutConstraint?.constant = 301.0
charImageView.heightLayoutConstraint?.constant = 365.0
}
我用来获取widthLayoutConstraint
和heightLayoutConstraint
的扩展名
extension UIView{
/**
Gets the width layout constraint defined as the NSLayoutConstraint whose first item is self and first attribute is Height
*/
var heightLayoutConstraint:NSLayoutConstraint? {
get{
for constraint in constraints {
if constraint.firstItem as? UIView == self &&
constraint.firstAttribute == NSLayoutAttribute.Height
{
return constraint
}
}
return nil
}
}
/**
Gets the width layout constraint defined as the NSLayoutConstraint whose first item is self and first attribute is Width
*/
var widthLayoutConstraint:NSLayoutConstraint? {
get{
for constraint in constraints {
if constraint.firstItem as? UIView == self &&
constraint.firstAttribute == NSLayoutAttribute.Width
{
return constraint
}
}
return nil
}
}
}
这就是最初使用IB添加布局约束的方式。 如您所见,它们是为“紧凑宽度”尺寸类添加的,当我看到问题时(iPhone4S模拟器),我正在使用它们。
约束已经通过IB添加,我正在用代码更新它们的常量。 调试器清楚地表明常数是“实际更新的”,但是以某种方式以原始大小绘制了图像。
灰色约束表明这些约束存在但未安装在视图中。
请参考下图:
Installed
选项 更新:
您可以使用以下代码添加width
约束:
self.addConstraint(NSLayoutConstraint(
item: charImageView,
attribute: .Width,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 1.0,
constant: 301.0))
您可以使用其他答案更新约束值:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.