今天在使用VFL約束語句的時(shí)候發(fā)現(xiàn)一個(gè)比較奇怪的問題跷敬,試著居中一個(gè)控件Label讯私,我先是這樣寫的
let centerConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[label]", options: .alignAllCenterX, metrics: nil, views: ["label":sliderText])
sliderText.superview?.addConstraints(centerConstraints)
但是發(fā)現(xiàn)不行,會(huì)出現(xiàn)錯(cuò)誤西傀,嘗試了其他的一些VFL語句還是不行斤寇。
后來在網(wǎng)上找到了一些資料,找到了正確的居中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:應(yīng)該是水平方向 options 卻是要寫alignAllCenterY 表示垂直方向居中
V 和 H 的方向是反過來了 肿仑, 不是很理解為什么致盟。 - 必須是
[superview]-(<=1)-[label]
或者[superview]-(<=0)-[label]
這樣寫,[superview][label]
或是[superview]-0-[label]
卻不行尤慰。