它就像AutoLayoutKit,但是是用Swift编写的。适用于纯Swift项目。而且它非常简单。
更多详细信息请参阅变更日志。
尽管cocoapods还无法为您的iOS 7.0+应用程序或tvOS应用程序安装文稿(暂且如此),您仍然可以使用文稿。只需遵循“手动”安装或添加文稿作为一个框架项目到您的工作空间即可(我就是这么做的)。
Manuscript.layout(myButton) { c in
c.set(.Height, to: 60.0)
c.set(.Width, to: 60.0)
c.make(.Bottom, equalTo: self.view, s: .Bottom, minus: 10.0)
c.make(.CenterX, equalTo: self.view, s: .CenterX)
}
关于如何使用文稿的一些示例。
居中self.view中的UIView 'childView’并将其大小设为30×30
Manuscript.layout(childView) { c in
c.make(.CenterX, equalTo: view, s: .CenterX)
c.make(.CenterY, equalTo: view, s: .CenterY)
c.set(.Width, to: 30.0)
c.set(.Height, to: 30.0)
}
同样,但是使用便捷方法
Manuscript.layout(childView) { c in
c.centerIn(view)
c.setSize(CGSize(width: 30.0, height: 30.0))
}
将UIView 'container’与self.view的所有边对齐
Manuscript.layout(container) { c in
c.make(.Left, equalTo: view, s: .Left)
c.make(.Right, equalTo: view, s: .Right)
c.make(.Top, equalTo: view, s: .Top)
c.make(.Bottom, equalTo: view, s: .Bottom)
}
同样,但是使用便捷方法
Manuscript.layout(container) { c in
c.alignAllEdges(to: view)
}
将UIView 'container’与self.view的所有边对齐,并在容器周围留下30点的边距。
Manuscript.layout(container) { c in
c.make(.Left, equalTo: view, s: .Left, plus: 30.0)
c.make(.Right, equalTo: view, s: .Right, minus: 30.0)
c.make(.Top, equalTo: view, s: .Top, plus: 30.0)
c.make(.Bottom, equalTo: view, s: .Bottom, minus: 30.0)
}
同样,但是使用便捷方法。
Manuscript.layout(container) { c in
c.alignAllEdges(to: view, withInsets: UIEdgeInsets(top: 30.0, left: 30.0, bottom: 30.0, right: 30.0))
}
利用UIViewController提供的布局指南。
Manuscript.layout(container) { c in
c.make(.Left, equalTo: view, s: .Left)
c.make(.Right, equalTo: view, s: .Right)
c.make(.Top, equalTo: topLayoutGuide, s: .Baseline)
c.make(.Bottom, equalTo: bottomLayoutGuide, s: .Baseline)
}
有一个实用方法可以创建考虑屏幕比例的虚线。
Manuscript.layout(mySeparatorLine) { c in
c.make(.Left, equalTo: view, s: .Left)
c.make(.Right, equalTo: view, s: .Right)
c.make(.Top, equalTo: topLayoutGuide, s: .Baseline)
// sets the .Height to 1.0 on non-retina displays and to 0.5 on retina displays
c.makeHorizontalHairline()
}
函数make
和set
返回一个LayoutItem
类型的元组,对应于(constraint: NSLayoutConstraint?, targetItem: UIView?)
。'constraint’是指定的NSLayoutConstraint
,'targetItem’是添加NSLayoutConstraint
的视图。它是涉及的UIView
的最近共同父视图。
Manuscript.layout(container) { c in
leftConstaint = c.make(.Left, equalTo: view, s: .Left).constraint
rightConstaint = c.make(.Right, equalTo: view, s: .Right).constraint
topConstaint = c.make(.Top, equalTo: topLayoutGuide, s: .Baseline).constraint
bottomConstaint = c.make(.Bottom, equalTo: bottomLayoutGuide, s: .Baseline).constraint
}
之后,只需修改约束的常量并应用更改(这是普通的自动布局)。
UIView.animateWithDuration(0.6) { in
topConstraint?.constant = 100
view.layoutIfNeeded()
}
便捷方法返回所述元组的数组。将来也可能会是字典或元组,以提供更容易访问创建的约束。在此之前,检查代码的返回约束的顺序。
截至目前,您可以使用Carthage或CocoaPods通过依赖项管理器使用Manuscript安装,或者手动安装。
要手动做到这一点,请取以下文件并将它们添加到您的项目中
源/Manuscript.swift
源/LayoutProxy.swift
Manuscript是在MIT许可下发布的。