Ios Swift中NSLAYOUTCRAINT的简单用法?
我正在为子视图寻找一个简单的Swift解决方案,以便使用nsLayoutControint以编程方式填充超级视图。这应该很容易理解。我觉得现在这里的大多数答案都比需要的复杂Ios Swift中NSLAYOUTCRAINT的简单用法?,ios,swift,macos,cocoa,Ios,Swift,Macos,Cocoa,我正在为子视图寻找一个简单的Swift解决方案,以便使用nsLayoutControint以编程方式填充超级视图。这应该很容易理解。我觉得现在这里的大多数答案都比需要的复杂 extension NSLayoutConstraint { public static func simpleConstraints( view:NSView, direction:NSString = "H", padding1:Int = 0, padding2:Int = 0 ) -> [NSLayo
extension NSLayoutConstraint {
public static func simpleConstraints( view:NSView, direction:NSString = "H", padding1:Int = 0, padding2:Int = 0 ) -> [NSLayoutConstraint] {
view.translatesAutoresizingMaskIntoConstraints = false
let constraint = NSLayoutConstraint.constraintsWithVisualFormat("\(direction):|-\(padding1)-[view]-\(padding2)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view":view])
return constraint
}
}
用法:
parent.addConstraints( NSLayoutConstraint.simpleConstraints(child, direction: "H") )
parent.addConstraints( NSLayoutConstraint.simpleConstraints(child, direction: "V") )
NSLayoutConstraint.activateConstraintsEqualToSuperview(child)
假设您已经将
translatesAutoResizengMaskintoConstraints
设置为false
,并将子视图添加为视图的子视图,您可以设置四个约束,如下所示:
NSLayoutConstraint.activateConstraints([
subview.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor),
subview.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor),
subview.topAnchor.constraintEqualToAnchor(view.topAnchor),
subview.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor)
])
或在Swift 3中:
NSLayoutConstraint.activate([
subview.leadingAnchor.constraint(equalTo: view.leadingAnchor),
subview.trailingAnchor.constraint(equalTo: view.trailingAnchor),
subview.topAnchor.constraint(equalTo: view.topAnchor),
subview.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
这是一个使用可视格式的简单解决方案:
subview.translatesAutoresizingMaskIntoConstraints = false
let views = ["subview":subview]
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[subview]|", options: [], metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[subview]|", options: [], metrics: nil, views: views))
还有一个更简单的解决方案,根本不使用自动布局:
subview.frame = view.bounds
subview.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
结合建议和我的NSLayoutConstraint扩展概念,我决定使用一行简单的“fill superview”命令:
用法:
parent.addConstraints( NSLayoutConstraint.simpleConstraints(child, direction: "H") )
parent.addConstraints( NSLayoutConstraint.simpleConstraints(child, direction: "V") )
NSLayoutConstraint.activateConstraintsEqualToSuperview(child)