這是不太現實了,我指定每個子視圖與可視化格式和跟蹤它們
地球上
爲什麼不呢?你似乎認爲這是某種「無論」或「或」的情況。沒有什麼能夠阻止你使用可視化格式來建立一組約束。沒有法律說你必須把全部你的約束條件放入一個的可視格式。
而佈局引擎不知道或在乎你用什麼表示來形成你的約束。約束是一個約束!
考慮這個代碼,我建立了一個滾動視圖和約束30個標籤裏面:
var con = [NSLayoutConstraint]()
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[sv]|",
options:[], metrics:nil,
views:["sv":sv]))
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[sv]|",
options:[], metrics:nil,
views:["sv":sv]))
var previousLab : UILabel? = nil
for i in 0 ..< 30 {
let lab = UILabel()
// lab.backgroundColor = UIColor.redColor()
lab.translatesAutoresizingMaskIntoConstraints = false
lab.text = "This is label \(i+1)"
sv.addSubview(lab)
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|-(10)-[lab]",
options:[], metrics:nil,
views:["lab":lab]))
if previousLab == nil { // first one, pin to top
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|-(10)-[lab]",
options:[], metrics:nil,
views:["lab":lab]))
} else { // all others, pin to previous
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:[prev]-(10)-[lab]",
options:[], metrics:nil,
views:["lab":lab, "prev":previousLab!]))
}
previousLab = lab
}
con.appendContentsOf(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:[lab]-(10)-|",
options:[], metrics:nil,
views:["lab":previousLab!]))
NSLayoutConstraint.activateConstraints(con)
我使用視覺格式化,但我做一個約束爲時間,我添加視圖(這正是你所問的)。
哈。現在我感覺有點笨拙:)謝謝 – egze
請注意,如果您希望滾動視圖將其contentSize.height設置爲實際允許滾動,您還需要將最後一個標籤限制在滾動視圖的底部。 –
@robmayoff做到了這一點,粘貼時就切斷了 – matt