KRStackView
[ (https://travis-ci.org/Joshua Park/KRStackView)
简介
KRStackView 排列子视图的方式类似于 UIStackView
,但支持早期 iOS 版本以及自动调整大小和自动布局。
KRStackView 实例的子视图将根据其 direction
属性进行排列,因此不再需要执行复杂的计算来设置子视图的 origin
。
此外,只要正确设置了子视图的 size
属性,KRStackView 实例将自动调整其大小以包含所有的子视图。
布局视图可以像定义 KRStackView 实例的 origin
并设置子视图的大小一样简单。其他排列将由框架处理。
示例
要运行示例项目,请先克隆仓库,然后从示例目录运行pod install
。
要求
KRStackView 可以与自动调整大小和自动布局一起使用。
安装
KRStackView 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile。
pod "KRStackView"
用法
当使用代码和界面构建器时,《code>`KRStackView``的大小
并不那么重要,因为它会根据子视图的尺寸增长其边界
。
此外,每个子视图的《code>原点``属性也不会很重要,因为它们将根据《code>KRStackView``实例的属性进行排列。只需确保准确地设置 `size` 属性,并且依照应该布局的顺序。
代码化
只需声明一个 KRStackView
实例并向其中添加子视图。然后通过以下方式设置各种属性进行进一步定制。
// Using `init()`
let stackView1 = KRStackView()
stackView1.addSubview(view1)
stackView1.addSubview(view2)
// Using `init(frame:subviews:)`
let stackView2 = KRStackView(frame: CGRectZero, subviews:[view1, view2])
界面构建
从《对象库》中将 UIView
拖到界面上,然后在《身份检查器》中将自定义类更改为 KRStackView
。
像对 UIView
对象一样将子视图添加到 KRStackView
中。
属性
@IBInspectable public var enabled: Bool = true
如果希望子视图布局为类似于 UIView
的普通布局,请将此属性设置为 false
。动态将该属性更改为 true
将导致布局动态更改。
默认值为 false
。
public var direction: StackDirection = .Vertical
KRStackView
会根据 direction
属性对子视图进行排列,忽略它们的初始 origin
。动态更改将反映出来。
默认值为 .Vertical
。可能的值有 .Vertical
和 .Horizontal
。
@IBInspectable public var translatesCurrentLayout: Bool = false
如果希望子视图的初始 origin
被转换为其相应的 KRStackView
属性,请将此属性设置为 true
。
当您想要 KRStackView
与现有的 UIView
结合使用或者想要保留初始布局但可以动态更改视图的布局时,可以使用此属性。
默认为 false
。此外,在调用 layoutSubviews()
后,此属性将自动设置为 false
。
public var insets: UIEdgeInsets = UIEdgeInsetsZero
内边距将基于子视图的最外层边界。如果 translatesCurrentLayout
设置为 true
,则忽略此属性。
默认值为 UIEdgeInsetsZero
。
@IBInspectable public var spacing: CGFloat = 8.0
此属性定义了子视图之间的间距。如果 KRStackView
实例中的所有子视图都需要均等地间隔,请使用此属性。
默认值为 8.0
。如果 itemSpacing
为非空值,则重写此属性。
public var itemSpacing: [CGFloat]?
此属性定义了子视图之间的单个间距。每个值是 subviews
数组中相应视图之后的间距,即 itemSpacing![n]
是 实例中
subviews[n]
之后 的间距。
数组中的值的数量应为 n-1
,其中 n
是 实例中子视图的数量。任何在 n-1之后出现的值将被忽略。如果数组中的值的数量少于
n-1
,则抛出一个致命错误。
如果设置了此属性,则忽略 spacing
属性。
public var alignment: ItemAlignment = .Origin
alignment
属性定义了子视图的对齐方式。如果 direction
设置为 .Vertical
,则此属性定义了子视图的横向对齐方式,反之亦然。
默认值为.Origin
。可能的值有.Origin
、.Center
和.EndPoint
。
public var itemOffset: [CGFloat]?
该itemOffset
属性定义了每个子视图的偏移量,基于alignment
属性。如果direction = .Vertical
且alignment = .Origin
,每个值将使子视图在x轴上从KRStackView
的原点偏移,即相当于子视图的origin.x = offset
。
每个项目值是对应视图在subviews
数组中的偏移量,即itemOffset![v]
是subviews[n]
的偏移量。
@IBInspectable public var shouldWrap: Bool = false
该shouldWrap
属性将在有剩余空间时缩小bounds
以使其更加紧致。如果子视图在垂直和水平方向上都超出了bounds
,则此属性似乎没有效果。
默认值为 false
。
作者
Joshua Park, [email protected]
许可证
KRStackView在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。