Swift学习:奇怪的 AutoLayout / VFL 居中问题

今天在使用VFL约束语句的时候发现一个比较奇怪的问题,试着居中一个控件Label,我先是这样写的

let centerConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[label]", options: .alignAllCenterX, metrics: nil, views: ["label":sliderText])
sliderText.superview?.addConstraints(centerConstraints)

但是发现不行,会出现错误,尝试了其他的一些VFL语句还是不行。
后来在网上找到了一些资料,找到了正确的居中VFL语句的写法。

git-hub center-vfl
奇怪的 AutoLayout / 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] 却不行。
了解的人帮忙解答下这具体是什么意思呢

你可能感兴趣的:(Swift学习:奇怪的 AutoLayout / VFL 居中问题)