我已经使用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