在自动布局中,您可以使用视觉格式语言组合水平和垂直约束吗?

Mar*_*eIV 5 ios autolayout visual-format-language

在我们的代码中很多地方,我不断看到这个......

containerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[view]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view":childView]))
containerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[view]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view":childView]))
Run Code Online (Sandbox Code Playgroud)

对我来说这似乎是多余的。我想知道是否有一种方法可以将这些格式组合成一个字符串;像这样的东西...

containerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[view]-0-|;V:|-0-[view]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view":childView]))
Run Code Online (Sandbox Code Playgroud)

那么这样的事情可能吗?

Sh_*_*han 2

抱歉,你不能使用这个,但你可以尝试这样的东西

let rr = UIView()

rr.backgroundColor = UIColor.red

self.view.addSubview(rr)

rr.translatesAutoresizingMaskIntoConstraints = false

["H:|-100-[rr]-100-|","V:|-100-[rr]-100-|"].forEach{NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: $0, options: NSLayoutFormatOptions.init(rawValue: 0), metrics: nil, views: ["rr":rr]))}
Run Code Online (Sandbox Code Playgroud)

  • 如果你打算这样做,你应该使用“forEach”而不是“map”。`map` 的目的是将一个数组或序列转换为一个数组。您不想在这里创建数组,是吗? (2认同)