2016-08-05 19 views
1

カスタムビューをレイアウトしようとしていますが、制約を有効にしようとすると、Xcodeは乗数を使用できないと言います。ここでは、コードの例です:機能と私は「定数」に「乗数」を置き換える必要があることを述べている:iOS制約で乗数を使用できません

class MenuView: UIView { 

    var addButton: AddButton! 
    var settingsButton: SettingsButton! 

    // ........ 

    func setConstraints (withBarReference reference: NSLayoutYAxisAnchor) { 
     NSLayoutConstraints.activateConstraints([ 
      // ........ 
      addButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 0.5), 
      // ........ 
      settingsButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 1.5) 
     ]) 
    } 

} 

ここの事はXcodeのがcontraintEqualToAnchor上の構文エラーを与えることです。

なぜXセンターアンカーで乗数オプションを使用できないのですか?

+0

を入力することで、この制約をアクティブにすることを忘れないでください乗数 "パラメータの場合、"定数 "のみを変更することができます –

+0

.isActive = trueを見逃しませんでしたか? –

答えて

1

NSLayoutXAxisAnchorアンカーで乗数を使用することはできません。直線に沿った位置を掛けることは、制約システムが理解できる方法では意味を持ちません。乗数はNSLayoutDimensionのアンカーでしか使用できません。これは幅のようにの長さがと測定されます。

作成しようとしているレイアウトは、スタックビューを使用する方がよいでしょう。

+0

IBでは、「理解できません」と言ってもこれを実行できます。それは実際に行いますが、結果を達成するのに最も効率的な方法です。たとえば、ビューの左側を親ビューの1/4線に揃えます。これはview.leftAnchorがsuperview.centerXに制約を課し、0.5乗数または1.5を使用して3/4ラインに制限されています。これがなければ、ガイドスナップにのみ使用される不可視ビューを作成する必要があります。コードを介してこれを行うには、私の答えを参照してください:) –

1

IBでは、Center Xで乗数オプションを使用して、探している効果を得ることができます(ボタン1の中心を、それが入っているビューの幅の1/4、button2の中心それが入っているビューの幅の2/3で):
setting the center of a button at 1/4 the width of the view it's in, using the Interface Buildersetting the center of a button at 2/3 the width of the view it's in, in StoryBoard

私はコードとIBの両方で使用しようとしましたが、コードではあなたと同じエラーが発生しました。 驚いたことに、IBでは、エラーは発生せず、警告も表示されませんでした。 (私はXcode 7を使用していますが、まだ動作しているかどうかをXcode 8で試してみます)。

0

これは、同じ結果があります。

//old settingsButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 1.5) 
//working settingsButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, constant: self.frame.width/2 * 0.5) 
+0

フレームの幅が変更された場合、制約が反映されないので、そうではありません。 –

1

あなたはヘルパー関数を使用して乗数を設定することはできませんが、NSLayoutConstraint初期化子を使用して乗数を設定することができます。ちょうどこれに悩まされましたが、答えが見つかりました。

あなたのコード:addButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 0.5)

正しいコード:NSLayoutConstraint(item: addButton, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 0.5, constant: 0)

また、あなたの制約がすでに存在する場合は、あなたが「自分を変えることはできませんisActive = true

関連する問題