[英]Add constraints between two sub views programmatically in Swift
我創建了兩個子視圖,一個在故事板中,一個帶有代碼,我想將第二個視圖(使用代碼創建)錨定到第一個視圖(在故事板中),並帶有一些約束,以便第二個視圖位於第一個視圖下方:
class ViewController: UIViewController{
@IBOutlet weak var view1: UIView!
override func viewDidLoad(){
super.viewDidLoad()
setUp()
}
func setUp(){
var view2 = UIView()
view2.setTranslatesAutoresizingMaskIntoConstraints(false)
view2.frame = CGRectMake(10,10,10,10)
self.view.addSubview(view2)
self.view.addConstraint(NSLayoutConstraint(item: view1, attribute: NSLayoutAttribute.TopMargin, relatedBy: NSLayoutRelation.Equal, toItem: view2, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10))
}
}
問題是我收到一條錯誤消息,說When added to a view, the constraint's items must be descendants of that view
。 在情節提要中有一些視圖並在代碼中有其他視圖是不好的做法嗎?
你有幾個問題。
首先,該錯誤意味着view1
和view2
都不是self.view
的視圖層次結構的一部分。 這可能是因為view1
尚未從情節view1
中解碼出來。 嘗試將這段代碼從viewDidLoad()
移至awakeFromNib()
,這是確保已加載它們的時間。
其次,您嘗試設置視圖的框架:
view2.frame = CGRectMake(10,10,10,10)
該框架將被布局引擎覆蓋,使其毫無意義。 刪除此行。
如果要使用自動布局,則需要明確指定視圖的大小(高度和寬度)和位置(x和y)。 您添加的約束僅指定了y方向,因此您還需要添加更多約束(可能再增加3個)來指定x方向,寬度和高度,這些約束當前未定義。
在情節提要中有一些視圖並在代碼中有其他視圖是不好的做法嗎?
不,這很常見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.