1

これは、スーパービューの中央にプログラムされたgithubセットビューの例です。

constraints = NSLayoutConstraint.constraintsWithVisualFormat(
      "H:[superview]-(<=1)-[label]",
      options: NSLayoutFormatOptions.AlignAllCenterY,
      metrics: nil,
      views: ["superview":view, "label":label])

私の質問は、「[superview]」を「|」に置き換えましたが、アップルのドキュメントの説明のように、それらは等しいと思います。実際にはそうではなく、うまくいきません。

私のコード。

   constraints = NSLayoutConstraint.constraintsWithVisualFormat(
                    "H:|-(<=1)-[imageview]",
                    options: NSLayoutFormatOptions.AlignAllCenterY,
                    metrics: nil,
                    views: ["imageview":imageview])

何か問題がありますか、それとも VFL のバグですか? アップルドキュメントはこちら

4

2 に答える 2

5

元のコードはトリック (またはハック) を使用しています。

AlignAllCenterYコンテナ内でビューを中央に配置することを意図したものではありません。サブビューの相対的な位置を指定するためのオプションがあります。たとえば、同じコンテナーに 3 つのラベルがある場合、コンテナーではなく、それらをすべて上揃えまたは中央揃えにすることができます (によって暗黙的に指定されます|)。

秘訣は、スーパービューを明示的に指定すると、フレームワークがそれを認識せず、制約が追加されることです。

ビューをコンテナーの中央に配置する正しい方法は次のとおりです。

let centerX = NSLayoutConstraint(item: label, 
                            attribute: .CenterX, 
                            relatedBy: .Equal,
                               toItem: view,
                            attribute: .CenterX, 
                           multiplier: 1.0,        
                             constant: 0.0);
view.addConstraint(centerX);

let centerY = NSLayoutConstraint(item: label, 
                            attribute: .centerY, 
                            relatedBy: .Equal,
                               toItem: view,
                            attribute: .centerY, 
                           multiplier: 1.0,        
                             constant: 0.0);
view.addConstraint(centerY);
于 2015-04-21T07:49:02.063 に答える