ManualLayout 1.3.0

ManualLayout 1.3.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最后发布2016年11月
SPM支持 SPM

Baris SencanBaris Sencan 维护。



ManualLayout

目录

  1. 安装
  2. 使用
  3. API 技巧表

安装

使用

只需在您的代码中 import ManualLayout,然后使用库提供的这些方法和属性来布局视图。您可以在下面的技巧表中查看所有内容的紧凑列表。还有示例项目帮助您入门。

API 技巧表

智能赋值运算符

智能赋值运算符 =~ 的作用只有一个;让您的任务更简单。

someView.origin =~ (0, 20)
anotherView.size =~ (100, 100)
yetAnotherView.frame =~ (0, 120, view.width, 100)

CGRect/CALayer/UIView 属性

// 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)。

所以,基本上,设置正常边的位置会带着整个视图移动,而设置替代边的位置只会移动那个边。如果您尝试将一个左边的边移动到视图的右边界之外,不必担心,边交换会自动完成,您不必担心这个问题。

UIView 方法

目前仅有一个方法,有两种变体,用于简单的大小计算。

func sizeToFit(width: CGFloat, height: CGFloat) -> CGSize
func sizeToFit(constrainedSize: CGSize) -> CGSize

假设您在一个视图中有一个标签,您希望将其布局为所有边框都缩进 4 个点,您可以轻松地做以下操作

myLabel.sizeToFit(inset(myView.size, 4))
myLabel.origin =~ (4, 4)

完成了!

UIScrollView 属性

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 属性

所有 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