今天在使用VFL约束语句的时候发现一个比较奇怪的问题,试着居中一个控件Label,我先是这样写的
let centerConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[label]", options: .alignAllCenterX, metrics: nil, views: ["label":sliderText])
sliderText.superview?.addConstraints(centerConstraints)
但是发现不行,会出现错误,尝试了其他的一些VFL语句还是不行。
后来在网上找到了一些资料,找到了正确的居中VFL语句的写法。
正确的写法是这样的
let centerXConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:[superview]-(<=1)-[label]", options: .alignAllCenterX, metrics: nil, views: ["superview":self.view,"label":sliderText])
sliderText.superview?.addConstraints(centerXConstraints)
let centerYConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:[superview]-(<=1)-[label]", options: .alignAllCenterY, metrics: nil, views: ["superview":self.view,"label":sliderText])
sliderText.superview?.addConstraints(centerYConstraints)
虽然成功的居中了,但是仍有一些问题不太明白
- 一定要指定superview , 而不能使用 | 符号
- H:应该是水平方向 options 却是要写alignAllCenterY 表示垂直方向居中
V 和 H 的方向是反过来了 , 不是很理解为什么。 - 必须是
[superview]-(<=1)-[label]
或者[superview]-(<=0)-[label]
这样写,[superview][label]
或是[superview]-0-[label]
却不行。