2015-01-08 71 views
3

我有一個視圖,我通過代碼創建並添加到另一個視圖作爲子視圖。 新的超級視圖可以隨時間改變它的框架,我希望新創建的子視圖相應地改變它的框架。 我該如何使用Swift中的代碼使用自動佈局?自動佈局適合父母通過代碼在Swift

回答

5

下面是一個例子:

let view = UIView() // existing view 

let subview = UIView() 
subview.setTranslatesAutoresizingMaskIntoConstraints(false) 

view.addSubview(subview) 
view.addConstraint(NSLayoutConstraint(item: subview, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1.0, constant: 0.0)) 
view.addConstraint(NSLayoutConstraint(item: subview, attribute: .Leading, relatedBy: .Equal, toItem: view, attribute: .Leading, multiplier: 1.0, constant: 0.0)) 
view.addConstraint(NSLayoutConstraint(item: view, attribute: .Bottom, relatedBy: .Equal, toItem: subview, attribute: .Bottom, multiplier: 1.0, constant: 0.0)) 
view.addConstraint(NSLayoutConstraint(item: view, attribute: .Trailing, relatedBy: .Equal, toItem: subview, attribute: .Trailing, multiplier: 1.0, constant: 0.0)) 
+0

我需要調用updateConstraints我這樣做之後? – YogevSitton

+0

這取決於你在何時何地添加約束。如果你在'viewDidLoad'中這樣做,那麼就不需要做任何事情。 – Kirsteins

+1

太棒了!來自doc:「在開發iOS 8.0或更高版本時,將約束的active屬性設置爲true,而不是直接調用addConstraint:方法,active屬性自動添加並從正確的視圖中刪除約束。 – rjobidon

0

正如@rjobidon提到的,你應該使用下面的代碼(Swift3

let view = UIView() // existing view 

    let subview = UIView() 
    subview.setTranslatesAutoresizingMaskIntoConstraints(false) 

    view.addSubview(subview) 

    NSLayoutConstraint(item: subview, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1.0, constant: 0.0).isActive = true 
    NSLayoutConstraint(item: subview, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0.0).isActive = true 
    NSLayoutConstraint(item: view, attribute: .bottom, relatedBy: .equal, toItem: subview, attribute: .bottom, multiplier: 1.0, constant: 0.0).isActive = true 
    NSLayoutConstraint(item: view, attribute: .trailing, relatedBy: .equal, toItem: subview, attribute: .trailing, multiplier: 1.0, constant: 0.0).isActive = true