2017-02-28 8 views
0

すべての私の制約に識別子を追加して、問題をデバッグできるようにします。問題は、私がアンカーを使用すると私の制約を直接作成しないということです。 私は制約を作成することができます自動レイアウトアンカー制約に識別子を追加するにはどうすればよいですか?

let constraint = NSLayoutConstraint(item: view, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 60.0) 

をその後私は、ビューに追加する必要があると思い、ないheightAnchorはどのように行うので

(UIStackViewsに関連付けられ.addConstraint()メソッドはありません)私はこれらのコード行によって自動生成された制約に識別子を追加します。

view.heightAnchor.constraint(equalToConstant: 60.0).isActive = true 
    view.widthAnchor.constraint(equalToConstant: 60.0).isActive = true 

アンカーは容易に自動レイアウトをプログラミング作ることになって、しかし確実ではない、正しくデバッグできないことを犠牲にしていますか? 識別子を追加できない場合、「不満足な」制約の例外をデバッグするにはどうすればよいですか?

答えて

2

あなたのコードは、あなたが、私は配列を使用して/それらを無効にアクティブにこの

のようにそれに
let myConstraint = view.heightAnchor.constraint(equalToConstant: 60.0) 
myConstraint.identifier = "myIdentifier" 
myConstraint.isActive = true 
+0

ああ。私はそれが複数の制約(おそらくそれらの配列)を作成していると思った。ご協力いただきありがとうございます! – Mozahler

2

私がこのquestionで与えた答えを見てください。それはあなたにあなたの質問への答えを与えるでしょう。

(なし.addConstraint()メソッド

はありませんはい、あります:

NSLayoutConstraint.activate([constraintvariable]) 

編集:

さてさて、私が正しくあなたの質問を理解している場合:

let vHeightConstraint = self.view.heightAnchor.constraint(equalToConstant: 60.0); 
vHeightConstraint.isActive = true 
vHeightConstraint.identifier = "Your identifier" 

このようにすると、制約のための変数があり、その値を見るためにデバッグで利用できるようになります。

+0

私はこれらの新しいアンカー制約に.addConstraint()メソッドがないという点を明確にするために私の質問を編集しました。私は制約をアクティブにする方法を理解しています。 Auto Layoutが.heightAnchor、.widthAnchorなどを使用して手動で作成したときに追加の制約を手動で作成してアクティブ化する必要がないようにしたいと考えています。これらのアンカーはコードの量を減らすためのものであり、 – Mozahler

+0

この最新の編集の前にNSDmitryの反応を見ました。私も同様にこれを打ち切った。ありがとう。 – Mozahler

1

を識別子を追加することができますので、あなたが、制約を返します。

var p = [NSLayoutConstraint]() // portrait constraints 
var l = [NSLayoutConstraint]() // landscape constraints 

// (an example of this) pin segmentedView to top 

p.append(segmentedControl.topAnchor.constraint(equalTo: imageLayout.topAnchor)) 
p.append(segmentedControl.widthAnchor.constraint(equalToConstant: 300)) 
p.append(segmentedControl.centerXAnchor.constraint(equalTo: imageLayout.centerXAnchor)) 
l.append(segmentedControl.topAnchor.constraint(equalTo: imageLayout.topAnchor)) 
l.append(segmentedControl.widthAnchor.constraint(equalToConstant: 300)) 
l.append(segmentedControl.centerXAnchor.constraint(equalTo: imageLayout.centerXAnchor)) 

public func setOrientation(_ p:[NSLayoutConstraint], _ l:[NSLayoutConstraint]) { 
    NSLayoutConstraint.deactivate(l) 
    NSLayoutConstraint.deactivate(p) 
    if self.bounds.width > self.bounds.height { 
     NSLayoutConstraint.activate(l) 
    } else { 
     NSLayoutConstraint.activate(p) 
    } 
} 

あなたがアイデアを得る....制約を配列に移動し、必要に応じて有効/無効を切り替えます。

+0

本当にいいですね。ありがとう! – Mozahler

関連する問題