2016-09-18 8 views
-1

EDIT - 修正しました。答えを参照してください。Swift - Xcode 8 - iOS 10 - 単純な制約を作成できません。

私はプログラムで制約を作成する方法を学ぼうとしています。私はviewDidLoadで、このコードを使用して、画面の上部にUILabelを制限しようとした:

override func viewDidLoad() { 
    super.viewDidLoad() 

    //the variable label already exists. I make a UILabel. 
    label = UILabel() 
    label.text = "Hello" 
    label.backgroundColor = UIColor(red: 1, green: 1, blue: 0, alpha: 1) 

    //I add the label to the ViewController 
    view.addSubview(label) 

    //I use an array of constraints because I will make more later. 
    let constraints : [NSLayoutConstraint] = [ 
     NSLayoutConstraint(item: label, attribute: .top, relatedBy: .equal, toItem: topLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0.0) 
    ] 
    view.addConstraints(constraints) 
} 

私は私のアプリを実行すると、私が始まるエラーを取得:

[LayoutConstraints]ができません。同時に制約を満足させる。

制約のために私の意図式ました:

label.top = 1.0 * topLayoutGuide.bottom + 0.0

を私はInterface Builderのと同じ制約であるように思わ何を作成し、それ働いた。しかし、私はそれをプログラム的にしようとすると、それはしません。私がやっていることで何が問題なのですか?NSLayoutConstraintを使ってプログラムで制約を作成すると、ラベルをステータスバーのすぐ下の画面の上に固定しますか?

私の情報源:

Apple - Anatomy of a Constraint

Apple - Programmatically creating Constraints

StackOverflow - SWIFT | Adding constraints programmatically

+0

あなたがプログラム的な制約をたくさんお持ちの場合は、SnapKitやその他のAutoLayoutフレームワークをチェックして、100万回の作業を簡単にしてください。 – brandonscript

+0

@brandonscript私は知っている、と私はむしろIBまたは何かを使用するが、私はそれをプログラム的に行う方法を理解したい。 – ostrichofevil

答えて

-1

これは、既存のマスク制約との衝突を避けるために、虚偽であることをtranslatesAutoresizingMaskIntoConstraintsを設定することにより固定することができます。

label.translatesAutoresizingMaskIntoConstraints = false 
関連する問題