如何使用VLF将对象堆叠在另一个之上?

时间:2016-03-11 16:24:08

标签: ios swift visual-format-language

由于某种原因,这个VLF代码......:

    // Label Constraints
    var allConstraints = [NSLayoutConstraint]()
    let views = ["chapterVerseLabel" : chapterVerseLabel, "sanskritLabel" : sanskritLabel, "englishLabel" : englishLabel, "translationLabel" : translationLabel, "commentaryLabel" : commentaryLabel]
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|-[chapterVerseLabel]-[sanskritLabel]-[englishLabel]-[translationLabel]-[commentaryLabel]-|", options: [], metrics: nil, views: views)
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[chapterVerseLabel]-15-|", options: [], metrics: nil, views: views)
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[sanskritLabel]-15-|", options: [], metrics: nil, views: views)
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[englishLabel]-15-|", options: [], metrics: nil, views: views)
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[translationLabel]-15-|", options: [], metrics: nil, views: views)
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[commentaryLabel]-15-|", options: [], metrics: nil, views: views)
    NSLayoutConstraint.activateConstraints(allConstraints)

产生这个:

enter image description here

我似乎无法理解为什么第一个对象chapterVerseLabel之间存在巨大差距。理想情况下,我希望将对象堆叠在另一个上面。也许是10pt之间的差距。这就是我认为这一行会做的事情:

allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|-[chapterVerseLabel]-[sanskritLabel]-[englishLabel]-[translationLabel]-[commentaryLabel]-|", options: [], metrics: nil, views: views)

我通过添加指定的高度等来尝试变体,但似乎都没有效果。

1 个答案:

答案 0 :(得分:1)

由于所有视图都是垂直锚定的,因此自动布局必须放宽至少一个约束,以便根据您的设备大小显示它们。 它不知道你最好在底部留下更多的空隙,所以你必须指定它。 尝试为约束分配较低的优先级,该约束将最后一个UILabel附加到视图控制器的底部。 这是一个指定优先级的示例:

NSDictionary *metrics = @{@"lowPriority":@(UILayoutPriorityDefaultLow)};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-30.0@lowPriority-[label]" options:0 metrics:metrics views:views];