Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift中NSLAYOUTCRAINT的简单用法?_Ios_Swift_Macos_Cocoa - Fatal编程技术网

Ios Swift中NSLAYOUTCRAINT的简单用法?

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

我正在为子视图寻找一个简单的Swift解决方案,以便使用nsLayoutControint以编程方式填充超级视图。这应该很容易理解。我觉得现在这里的大多数答案都比需要的复杂

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)