我有一个NSLayoutConstraint
约束:
var myConstantLeading: CGFloat = 10
var myConstantTrailing: CGFloat = 10
var myConstraintLeading = NSLayoutConstraint (item: image,
attribute: NSLayoutAttribute.Leading,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Leading,
multiplier: 1,
constant: myConstantLeading)
self.view.addConstraint(myConstraintLeading)
var myConstraintTrailing = NSLayoutConstraint (item: image,
attribute: NSLayoutAttribute.Trailing,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Trailing,
multiplier: 1,
constant: myConstantTrailing)
self.view.addConstraint(myConstraintTrailing)
按下UIButton
后,image
会缩放:
self.image.transform = CGAffineTransformMakeScale(0.8, 0.8)
但是,在转换完成后,constant
不会改变:
println(myConstraint.constant) // equals to 10
println(myConstant) // equals to 10
我调整了图片的大小,因此constant
应该会有所不同。为什么不发生这种情况?
答案 0 :(得分:1)
您设置的限制都使用" Equal"与任何一方持续10pt的关系。如果您在不调整约束的情况下更改图像大小,则违反了约束要求&有一个模糊的布局。
如果您想观察常数值的变化,则需要允许更改。你必须改变" Equal"到"大于或等于"因此允许约束与其当前的10pt值不同。这当然假设图像只能缩小 - 它永远不会远离边缘大于10pt,但它可能更小。
您还需要在转换图像后清楚地定义您希望在布局中发生什么。如果您希望图像在按钮点击/调整大小后保持居中,则理想情况下只需向图像添加约束以使其在容器中水平居中。
仅调整" ="到"> ="仍然是模棱两可的,因为系统不知道图像应该离左或右多远,也不知道图像宽度是多少。您需要向其提供更多信息,例如"水平居中容器" AND"领先&尾部> = 10pt来自superview"。
答案 1 :(得分:0)
如果您查看UIView类参考transform property,您会看到一条警告:
如果此属性不是identity变换,则frame属性的值是未定义的,因此应该被忽略。
并且由于您的视图转换属性不是标识转换且其框架未定义,因此它的所有约束常量也应该被忽略,因为它们与视图的框架链接