我有一個應用程序,它有一個動態生成的視圖,每次視圖加載時都可能會有所不同。主視圖包含一個設置爲主視圖邊界的ScrollView。然後子視圖會動態添加到ScrollView中,但這些視圖的高度不會相同,並且可以隨時更改高度(例如,用戶單擊視圖內容並且它會更改)。我想使用佈局約束來確保每個視圖都保持與其上面的視圖保持一致,並使用一些任意的填充。見下圖:使用NSLayoutConstraints在SwiftView中垂直對齊動態視圖使用Swift
現在所有的填充值設置爲10(上,左,右)。我使用框架手動設置這些子視圖的位置,但如果視圖更改大小,這不起作用,所以我想將其更改爲使用NSLayoutConstraints,但我遇到了一些問題。
作爲一個測試,我設置的子視圖的框架再像以前那樣,但後來我加了約束:
// newView is created and its frame is initialized
self.scrlView?.addSubview(newView)
let constr = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.previousView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10)
NSLayoutConstraints.activateConstraints([constr])
newView.translatesAutoResizingMaskIntoConstraints = false
self.previousView = newView
但是意見是無處可看。我究竟做錯了什麼?所有需要的是確保每個視圖的頂部與先前視圖對齊,並且無論視圖高度如何,它們都保持這種方式。
此外,由於這些視圖都添加到滾動視圖,使用上面的佈局約束如何設置滾動視圖的正確內容大小?
我可以看到頂部約束,但newView的前導和尾隨(a.k.a左和右)約束在哪裏? – gwinyai
@gwinyai他們需要嗎?真的,我所關心的是頂級路線。 –
我現在的假設是滾動視圖的內容視圖不會調整以適合您的子視圖。你可以1.手動調整內容大小,如下所示self.scrlView?.contentSize = CGSize(width:view.frame.width,height:view.frame.height)或者2.給子視圖至少設置一個頂部和左邊的約束。 – gwinyai