以可视格式语言

时间:2016-03-25 14:28:50

标签: swift visual-format-language

我有3个标签,我在这张照片中互相放置:

enter image description here

然而现在它们被放置在左侧,我不希望它们被放置在水平中心。以下是横向放置的可视格式代码:

let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat(
            "H:|[label][label2][label3]|",
            options: [],
            metrics: nil,
            views: views)

然而无论我测试什么,我都无法让他们集中注意力,任何想法?

2 个答案:

答案 0 :(得分:5)

如果你想让它水平/垂直居中,我从图像中理解你可以这样:

// Center horizontally
var constraints = NSLayoutConstraint.constraintsWithVisualFormat(
    "V:[superview]-(<=1)-[label2]",
    options: NSLayoutFormatOptions.AlignAllCenterX,
    metrics: nil,
    views: ["superview":view,"label2":label2])

view.addConstraints(constraints)

// Center vertically
constraints = NSLayoutConstraint.constraintsWithVisualFormat(
    "H:[superview]-(<=1)-[label1][label2][label3]",
    options: NSLayoutFormatOptions.AlignAllCenterY,
    metrics: nil,
    views: ["superview":view, "label1":label1,"label2":label2,"label3":label3])

view.addConstraints(constraints)

所以看起来像这样: enter image description here

答案 1 :(得分:0)

这种情况正在发生,因为最右边的标签正在扩展以消耗所有剩余空间。为了达到预期的结果,我们必须做两件事:

  1. 更改VFL以明确设置每个标签宽度相同。您可以通过将格式更改为H:|[label1][label2(==label1)][label3(==label1)]|

  2. 来执行此操作
  3. 使用textAlignment属性修改标签,使其文本居中对齐。

  4. 您可以将以下内容放入游乐场,以便更好地了解正在进行的操作:

    import UIKit
    
    let frame = CGRectMake(0, 0, 500, 500)
    
    let label1 = UILabel()
    label1.layer.borderColor = UIColor.redColor().CGColor
    label1.layer.borderWidth = 1
    label1.text = "Label 1"
    label1.textAlignment = .Center
    label1.translatesAutoresizingMaskIntoConstraints = false
    label1.sizeToFit()
    
    let label2 = UILabel()
    label2.layer.borderColor = UIColor.greenColor().CGColor
    label2.layer.borderWidth = 1
    label2.text = "Label 2"
    label2.textAlignment = .Center
    label2.translatesAutoresizingMaskIntoConstraints = false
    label2.sizeToFit()
    
    let label3 = UILabel()
    label3.layer.borderColor = UIColor.blueColor().CGColor
    label3.layer.borderWidth = 1
    label3.text = "Label 3"
    label3.textAlignment = .Center
    label3.translatesAutoresizingMaskIntoConstraints = false
    label3.sizeToFit()
    
    let view = UIView(frame: frame)
    view.backgroundColor = UIColor.grayColor()
    view.addSubview(label1)
    view.addSubview(label2)
    view.addSubview(label3)
    
    let originalFormat = "H:|[label1][label2][label3]|"
    let newFormat = "H:|[label1][label2(==label1)][label3(==label1)]|"
    let views = ["label1": label1, "label2": label2, "label3": label3]
    let constraints = NSLayoutConstraint.constraintsWithVisualFormat(originalFormat, options: [], metrics: nil, views: views)
    
    view.addConstraints(constraints)
    view.layoutIfNeeded()
    
    view
    

    使用originalFormat,你得到这个: Output using originalFormat

    根据我提议的更改,您可以获得: Output using newFormat

相关问题