测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可 | MIT |
发布最后发布 | 2016年11月 |
SPM支持 SPM | ✗ |
由 Baris Sencan,Baris Sencan 维护。
只需在您的代码中 import ManualLayout
,然后使用库提供的这些方法和属性来布局视图。您可以在下面的技巧表中查看所有内容的紧凑列表。还有示例项目帮助您入门。
智能赋值运算符 =~
的作用只有一个;让您的任务更简单。
someView.origin =~ (0, 20)
anotherView.size =~ (100, 100)
yetAnotherView.frame =~ (0, 120, view.width, 100)
// For fast positioning.
var origin: CGPoint
var x: CGFloat
var y: CGFloat
var center: CGPoint
var centerX: CGFloat
var centerY: CGFloat
var top: CGFloat
var right: CGFloat
var bottom: CGFloat
var left: CGFloat
// For fast sizing.
var size: CGSize
var width: CGFloat
var height: CGFloat
// Alternate edges. Their names may change in the near future.
var top2: CGFloat
var right2: CGFloat
var bottom2: CGFloat
var left2: CGFloat
交替边与正常边的差异需要一些解释。想象我们有一个视图在位置(0,0)的(100,100)大小,命名为 myView。如果我们做 myView.right = 200
,那么它的位置现在是(100,0)且大小不变。然而,当我们视图位于(0,0)时,如果我们做了 myView.right2 = 200
,那么 myView 仍然在(0,0),但大小变为(200,100)。
所以,基本上,设置正常边的位置会带着整个视图移动,而设置替代边的位置只会移动那个边。如果您尝试将一个左边的边移动到视图的右边界之外,不必担心,边交换会自动完成,您不必担心这个问题。
目前仅有一个方法,有两种变体,用于简单的大小计算。
func sizeToFit(width: CGFloat, height: CGFloat) -> CGSize
func sizeToFit(constrainedSize: CGSize) -> CGSize
假设您在一个视图中有一个标签,您希望将其布局为所有边框都缩进 4 个点,您可以轻松地做以下操作
myLabel.sizeToFit(inset(myView.size, 4))
myLabel.origin =~ (4, 4)
完成了!
var contentWidth: CGFloat
var contentHeight: CGFloat
var contentTop: CGFloat // Always equal to 0. Read-only.
var contentLeft: CGFloat // Always equal to 0. Read-only.
var contentBottom: CGFloat // contentHeight alias.
var contentRight: CGFloat // contentWidth alias.
var viewportTop: CGFloat // contentOffset.y alias.
var viewportLeft: CGFloat // contentOffset.x alias.
var viewportBottom: CGFloat // conentOffset.y + view height
var viewportRight: CGFloat // contentOffset.x + view width
所有 UIViewController 属性均只读。它们提供对控制器视图属性的便捷读访问。
var bounds: CGRect
var center: CGPoint
var centerX: CGFloat
var centerY: CGFloat
var size: CGSize
var width: CGFloat
var height: CGFloat
var top: CGFloat // Top layout guide y coordinate.
var right: CGFloat // Equal to the width of the controller's view.
var bottom: CGFloat // Bottom layout guide y coordinate.
var left: CGFloat // Always equal to 0.
这些函数永远不会修改它们所传递的视图/层/矩形等。
func inset(view: UIView, amount: CGFloat) -> CGRect
func inset(layer: CALayer, amount: CGFloat) -> CGRect
func inset(rect: CGRect, amount: CGFloat) -> CGRect
func inset(view: UIView, dx: CGFloat, dy: CGFloat) -> CGRect
func inset(layer: CALayer, dx: CGFloat, dy: CGFloat) -> CGRect
func inset(rect: CGRect, dx: CGFloat, dy: CGFloat) -> CGRect
func inset(view: UIView, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect
func inset(layer: CALayer, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect
func inset(rect: CGRect, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGRect
func inset(size: CGSize, amount: CGFloat) -> CGSize
func inset(size: CGSize, dx: CGFloat, dy: CGFloat) -> CGSize
func inset(size: CGSize, top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> CGSize
func offset(view: UIView, amount: CGFloat) -> CGRect
func offset(layer: CALayer, amount: CGFloat) -> CGRect
func offset(rect: CGRect, amount: CGFloat) -> CGRect
func offset(view: UIView, dx: CGFloat, dy: CGFloat) -> CGRect
func offset(layer: CALayer, dx: CGFloat, dy: CGFloat) -> CGRect
func offset(rect: CGRect, dx: CGFloat, dy: CGFloat) -> CGRect
func offset(point: CGPoint, amount: CGFloat) -> CGPoint
func offset(point: CGPoint, dx: CGFloat, dy: CGFloat) -> CGPoint