2014-11-03 69 views
16

我已經使用IB在視圖控制器上添加了UIView。我們稱之爲redView以編程方式添加子視圖並使用約束來定位它

enter image description here

然後我就在代碼中使用自動佈局約束固定的四面,當我運行它,它看起來像這樣預期。

enter image description here

現在我想一個UILabel加入到這一觀點編程,它位置使用自動佈局約束的中心。

以下是我到目前爲止的代碼。

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet private var redView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     redView.setTranslatesAutoresizingMaskIntoConstraints(false) 

     let leadingConstraint = NSLayoutConstraint(item: redView, attribute: .Leading, relatedBy: .Equal, toItem: view, attribute: .Leading, multiplier: 1, constant: 0) 
     let trailingConstraint = NSLayoutConstraint(item: redView, attribute: .Trailing, relatedBy: .Equal, toItem: view, attribute: .Trailing, multiplier: 1, constant: 0) 
     let topConstraint = NSLayoutConstraint(item: redView, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1, constant: 0) 
     let bottomConstraint = NSLayoutConstraint(item: redView, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .Bottom, multiplier: 1, constant: 0) 
     view.addConstraints([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint]) 


     let label = UILabel() 
     label.text = "Auto Layout Exercise" 
     redView.addSubview(label) 

     let xCenterConstraint = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: redView, attribute: .CenterX, multiplier: 1, constant: 0) 
     let yCenterConstraint = NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: redView, attribute: .CenterY, multiplier: 1, constant: 0) 
     let leadingConstraint1 = NSLayoutConstraint(item: label, attribute: .Leading, relatedBy: .Equal, toItem: redView, attribute: .Leading, multiplier: 1, constant: 20) 
     let trailingConstraint1 = NSLayoutConstraint(item: label, attribute: .Trailing, relatedBy: .Equal, toItem: redView, attribute: .Trailing, multiplier: 1, constant: -20) 
     redView.addConstraints([xCenterConstraint, yCenterConstraint, leadingConstraint1, trailingConstraint1]) 

    } 

} 

問題是標籤沒有出現在redView上。任何人都可以告訴我我在這裏失蹤了什麼?

謝謝。

回答

37

我敢肯定,你還需要設置:

label.setTranslatesAutoresizingMaskIntoConstraints(false) 

否則,我不認爲限制將適用於標籤。

+1

而事實上,你應該看到在控制檯中該結果的信息。 – matt 2014-11-03 20:05:30

+0

並且在控制檯中感謝天堂的那條消息,因爲它幾乎可以保證我每次都會忘記那行代碼。 :) – matt 2014-11-03 20:08:53

+0

是的,這是原因。我曾經用'redView'的'setTranslatesAutoresizingMaskIntoConstraints'行進行了測試,但它沒有影響視圖,所以我認爲這行不是必需的。我想這是你編程創建的視圖。謝謝。 – Isuru 2014-11-03 20:08:56

11

注意事項斯威夫特2/3

它已經更改爲布爾屬性:UIView.translatesAutoresizingMaskIntoConstraints

相反,它以前是的:

label.setTranslatesAutoresizingMaskIntoConstraints(false) 

現在是:

label.translatesAutoresizingMaskIntoConstraints = false 
3

你需要做的這對每個UIControl分配NSConstraints

label.translatesAutoresizingMaskIntoConstraints = false 
相關問題