我已經使用IB在視圖控制器上添加了UIView
。我們稱之爲redView
。以編程方式添加子視圖並使用約束來定位它
然後我就在代碼中使用自動佈局約束固定的四面,當我運行它,它看起來像這樣預期。
現在我想一個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
上。任何人都可以告訴我我在這裏失蹤了什麼?
謝謝。
而事實上,你應該看到在控制檯中該結果的信息。 – matt 2014-11-03 20:05:30
並且在控制檯中感謝天堂的那條消息,因爲它幾乎可以保證我每次都會忘記那行代碼。 :) – matt 2014-11-03 20:08:53
是的,這是原因。我曾經用'redView'的'setTranslatesAutoresizingMaskIntoConstraints'行進行了測試,但它沒有影響視圖,所以我認爲這行不是必需的。我想這是你編程創建的視圖。謝謝。 – Isuru 2014-11-03 20:08:56