TABSwiftLayout 4.0.1

TABSwiftLayout 4.0.1

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布最后发布2019年1月
SPM支持 SPM

ShapsSam DodsJon HockingDaniela BulgaruLuciano MarisiSam Dods 维护。



  • 作者
  • 应用程序业务

The App Business

TABSwiftLayout

Build Status

它是做什么的?

一个库,提供一个灵活但非常简单的API,以编程方式处理AutoLayout。

为什么我会用它?

使用标准Apple API非常麻烦。即使是像约束视图宽度这样简单的事情

let constraint = NSLayoutConstraint(item: view, attribute: .width, relatedBy: .equal, toItem: view, attribute: .width, multiplier: 1, constant: 100)
NSLayoutConstraint.activateConstraints([constraint])

现在有了SwiftLayout

view.size(.horizontal, relatedBy: .equal, size: 100)

如您所见,SwiftLayout还消除了您激活约束的需求,并消除了Apple API中所需的重叠性。

我能用它做什么?

目前所有最常用的布局任务都可以用SwiftLayout来完成。

位置

view.pin(edge: .top, toEdge: .top, ofView: view.superview) // default margin 0
view.pin(edge: .top, toEdge: .top, ofView: view.superview, margin: 15)
view.pin(edges: [.left, .right], ofView: view.superview) // default margins (0, 0, 0, 0)
view.pin(edges: [.left, .right], ofView: view.superview, margins: EdgeMargins(top: 0, left: 15, bottom: 0, right: 15))

尺寸

view.size(axis: .horizontal, ofViews: [view]) // default ratio 1.0
view.size(axis: .horizontal, ofViews: [view], ratio: 1.5)
view.size(axis: .horizontal, relatedBy: .equal, size: 100)
view.size(axis: .horizontal, relativeTo: .horizontal, ofView: view.superview) // default ratio 1.0
view.size(axis: .horizontal, relativeTo: .horizontal, ofView: view.superview, ratio: 0.5)

对齐(便利方法)

view.alignTop(toView: otherView)
view.alignBottom(toView: otherView)
view.alignLeft(toView: otherView)
view.alignRight(toView: otherView)

view.alignHorizontally(toView: otherView)
view.alignVertically(toView: otherView)

注意事项

与Apple的API一样,您必须确保您的视图已在superview中添加,然后再为其设置任何约束。然而,在SwiftLayout中,在这种情况下不会添加约束,并且一个友好的print()消息会指出您已经犯了错误。

附加API

SwiftLayout还包括一组额外的API,用于检查当前应用于视图的约束类型。

let constraints = view.viewConstraints

此API与Apple的实现略有不同,因为它将自动扫描superview,以返回应用于此视图的当前所有约束。

let constraints = view.constraints(forTrait: .leftMargin)

这对于需要调整常量或完全替换特定约束非常有用。更好的是,这是一个位掩码,因此您可以一次请求多个约束;)

if view.contains(trait: [.leftMargin, .rightMargin]) {
  ...
}

最后,您还可以检查视图,以确定它是否包含特定的布局特性集。