1

私はコレクションビューセルに制約を追加しようとしています。私はそのクラスでこのコードを使用する場合しかし、私は、私は受信エラーが、私はよく分からないcollectionViewCellに制約をプログラムで追加しますか?

認識されていないセレクタがクラス

に送信され

class IndexD: UICollectionViewCell { 

func contstraints() { 
    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": IndexD.self])) 
} 
} 

コンソールエラーを取得しますエラーを取り除くためにコードを変更する方法。目標は、特定のコレクションビューセルごとに制約を設定することです。

答えて

1

、あなたはビューv0のための間違った値を渡しています。クラス自体を参照するIndexD.selfではなく、クラスの現在のインスタンスを参照するselfを使用する必要があります。

views: ["v0": self] 

は、他の問題があります。

はあなた viewsに変更し

。生成された制約をselfに追加していますが、それらをビュー階層の上位項目に追加する必要があります。 "H:|[v0]|"superviewselfを含む制約を生成するので、実際にはsuperview?.addConstraints(...を実行する必要があります。

iOS 8以降、制約を有効にする簡単な方法があります。 isActiveプロパティをtrueに設定すると、自動的に適切なビューに追加されます。アクティブにする制約が複数ある場合は、制約の配列でNSLayoutContraint.activate()を呼び出すと、すべての制約がiOSによってアクティブになります。

あなたは何NSLayoutFormatOptionsを持っていない場合は、単に[]を渡します。また、これがそのパラメータのデフォルト値であるため、options: []を省略することができます。助けのための

func contstraints() { 
    NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", metrics: nil, views: ["v0": self])) 
} 
+0

ありがとう:

ので、アカウントにそのすべてを取るには、ここにあなたのコードの修正版です!しかし、私は新しいコードを実行するとエラーが発生します。 ''制約フォーマットを解析できません: '|'関連するビューにスーパービューがないため、文字: H:| [v0] | **。コードから '|'を削除すると、実行されますが、制約は作成されません – baxu

+0

特に何を達成しようとしていますか?これはcollectionViewCellであるため、通常、レイアウトを制御するためにセル自体に制約を追加しません。セル内のアイテムのレイアウトを制御するために、その中に制約を追加できます。 – vacawama

+0

はい、あなたは正しいです。さらなる研究から、ダイナミックセルの自動サイズ調整は、私が使用する必要があるものであり、制約ではないと考えています。 – baxu

0

まず、UIKitをインポートしていない場合は、また、そのクラスを初期化して、CollectionCellが関数を実行する場所を知るようにする必要があります。あなたのコードは次のようになります..あなたがオーバーライドINITでそれを実行しようとすると、スウィフトは[NsLayoutConstraints]や混乱など、あなたの方法を参照するので、私はあなたのメソッド名を変更し

import UIKit 

class IndexD: UICollectionViewCell { 

override init(frame: CGRect) { 
    super.init(frame: frame) 

    addContstraints() 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 


func addContstraints() { 
    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": IndexD.self])) 
} 

。あなたのviews辞書に

関連する問題