如何在 Swift 中制作没有 VisualFormat 的约束对象?
Posted
技术标签:
【中文标题】如何在 Swift 中制作没有 VisualFormat 的约束对象?【英文标题】:How to make constraint objects without VisualFormat in Swift? 【发布时间】:2014-11-06 04:18:44 【问题描述】:我手动添加了一堆用于纵向模式的布局约束。现在我想做两组约束,并根据设备是横向还是纵向模式在它们之间翻转。我不想使用“视觉格式化”。
我的现有/工作约束如下所示:
mainview.addConstraint( NSLayoutConstraint(item: vPic, attribute: .Top, relatedBy: .Equal, toItem: mainview, attribute: .Top, multiplier: 1, constant: 0) )
但我想将约束放入一个数组(以及其他数组),并在设备旋转时应用它们:
var constraintsPortrait = [NSLayoutConstraint]()
constraintsPortrait.extend(NSLayoutConstraint(item: vPic, attribute: .Top, relatedBy: .Equal, toItem: mainview, attribute: .Top, multiplier: 1, constant: 0))
mainview.addConstraints(constraintsPortrait)
我在第二行得到一个错误:
Type 'NSLayoutConstraint' does not conform to protocol 'SequenceType'
我可以在网上找到的唯一示例是关于如何使用“visualformat”语法将约束创建为对象。像这样:
let view2_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:[view2(>=40)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
有什么建议吗?
【问题讨论】:
这是因为extend
不是append
。它们押韵,但不一样。您的问题与如何制作 NSLayoutConstraints 无关。
【参考方案1】:
extend
是将Array
(或任意SequenceType
)连接到Array
。你应该改用append
。
var constraintsPortrait = [NSLayoutConstraint]()
constraintsPortrait.append(NSLayoutConstraint(item: vPic, attribute: .Top, relatedBy: .Equal, toItem: mainview, attribute: .Top, multiplier: 1, constant: 0))
mainview.addConstraints(constraintsPortrait)
但在您的情况下,您不必为此准备一个数组。您可以直接使用addConstraint
方法添加约束。
mainview.addConstraint(NSLayoutConstraint(item: vPic, attribute: .Top, relatedBy: .Equal, toItem: mainview, attribute: .Top, multiplier: 1, constant: 0))
【讨论】:
【参考方案2】:在代码中添加约束很痛苦。那里有第三方库,可以让这个过程不那么痛苦。这里是其中的一些。
Snappy cartography purelayout
【讨论】:
以上是关于如何在 Swift 中制作没有 VisualFormat 的约束对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中制作一个单词可点击的 UITextView?