UIStackView

it2022-05-09  36

UIStackView(iOS 9以上支持)的实现原理基于AutoLayout所以和其他的View不太相同的是如果我们要好好的使用UIStackView的自动的布局管理.就不能addSubView.而是用addArrangedSubview:.简单的说是arrangedSubviews帮我们自动的管理了布局.而addSubView没有

创建方法

public init(frame: CGRect) public init(coder: NSCoder) /// 此方法无法在Swift中重写. public convenience init(arrangedSubviews views: [UIView]) // Adds views as subviews of the receiver.

属性以及方法

/// 获取UIStackView管理的subview open var arrangedSubviews: [UIView] { get } /// 会将view添加到arrangedSubviews列表的末尾. open func addArrangedSubview(_ view: UIView) /// 将arrangedSubviews列表中的对应子视图删除, open func removeArrangedSubview(_ view: UIView) /// 如果view不在arrangedSubviews列表中.那么就会添加到容器中的这个Index.如果在arrangedSubviews列表中就会更新他的Index open func insertArrangedSubview(_ view: UIView, at stackIndex: Int) /// 排列的轴.如果是`.horizontal`就表现为行(类比UITableView).如果是`.vertical`就表现为列 open var axis: NSLayoutConstraint.Axis /// 具体排列规则.下面有解释 open var distribution: UIStackView.Distribution /// 对其方式.下面有解释 open var alignment: UIStackView.Alignment /// Fill状态下允许的最小间距.负值的时候允许子控件重叠 open var spacing: CGFloat /// 设置某个视图后面视图的间距.@available(iOS 11.0, *) open func setCustomSpacing(_ spacing: CGFloat, after arrangedSubview: UIView) /// 获取某个视图后面视图的间距.@available(iOS 11.0, *) open func customSpacing(after arrangedSubview: UIView) -> CGFloat /// 垂直情况下是否按照文字控件的基线布局 open var isBaselineRelativeArrangement: Bool /// 设置为true之后就可以通过UIView的`layoutMargins`属性设置边距. open var isLayoutMarginsRelativeArrangement: Bool

Distribution

public enum Distribution : Int { /// 沿着轴线填充满可用的空间.如果空间不够会根据抗压优先级来压缩内部视图.如果空间过多会根据拉伸优先级来拉伸内部视图.如果优先级什么的都相同.会根据Index来调整. case fill /// 和上面一个不同的是.沿轴线方向的视图的大小是相同的(比如横向排布的宽度以及纵向排布时的高度) case fillEqually /// 按内部内容调整内部大小 case fillProportionally /// 当排列完之后如果有空隙空间.stackView会使内部控件间的空隙相等.如果空间不够会根据抗压优先级来调整内部视图 case equalSpacing /// 所有子视图中心距离保持一致 case equalCentering }

Alignment

public enum Alignment : Int { /// 全部填充满(axis垂直的左右以及水平的上下) case fill /// axis设置为垂直的时候支持的布局.控件靠左. case leading /// 对比leading就是中心线靠在中间 case center /// axis设置为垂直的时候支持的布局.控件靠右 case trailing /// axis设置为水平的时候支持的布局.类似trailing.不过是底部对其 public static var bottom: UIStackView.Alignment { get } /// 基线对其.仅仅当asix为水平布局的时候才有效 case lastBaseline // Valid for horizontal axis only }

最新回复(0)