/// 从iOS9开始 提供用于快速实现布局的控件
/// 特点是不用写具体的约束 而是通过属性声明想要的一个布局效果 内部自动添加完善的约束
@interface UIStackView : UIView
/// 构造方法
- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithArrangedSubviews:(NSArray<__kindof UIView *> *)views; // Adds views as subviews of the receiver.
/// 被管理布局的子views
@property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *arrangedSubviews;
/// 添加/移除/插入一个view 并对其约束进行管理
/// addSubView也能添加一个子view进来 不过约束不受控制
- (void)addArrangedSubview:(UIView *)view;
- (void)removeArrangedSubview:(UIView *)view;
- (void)insertArrangedSubview:(UIView *)view atIndex:(NSUInteger)stackIndex;
/// 声明布局方向
@property(nonatomic) UILayoutConstraintAxis axis;
/// 声明与布局方向同向的一个布局规则
/// 比如axis定义为水平布局 那么这个属性就是定义水平方向上的布局规则 反之 就是定义垂直方向上的布局规则
@property(nonatomic) UIStackViewDistribution distribution;
/// 跟distribution相反 定义非布局方向上的一个布局规则
@property(nonatomic) UIStackViewAlignment alignment;
/// 设置默认的一个控件间距
@property(nonatomic) CGFloat spacing;
/// spacing是对全部子控件生效的 这个方法是从iOS11开始可以针对某个控件 单独设置不同的spacing
- (void)setCustomSpacing:(CGFloat)spacing afterView:(UIView *)arrangedSubview API_AVAILABLE(ios(11.0),tvos(11.0));
- (CGFloat)customSpacingAfterView:(UIView *)arrangedSubview API_AVAILABLE(ios(11.0),tvos(11.0));
/// 声明文本控件在计算spacing的时候 是否针对字体的基线
/// 同一个label用富文本显示不同字体的时候 即使fontsize是一样的 也会出现不同字体不是底部对齐的情况 就是因为不同字体 基线不同
@property(nonatomic,getter=isBaselineRelativeArrangement) BOOL baselineRelativeArrangement;
/// 从iOS8开始 UIview有layoutMargins属性
/// 这个Bool值就是声明子控件布局约束是针对layoutMargins 还是 针对bounds
/// 打个比方 当一个UIView的layoutMargins.top = 10的时候,这个时候子控件的top如果 = 5,那么当布局针对bounds的时候 顶部留白就是5,如果是针对layoutMargins,就是加上这个layoutMargins.top = 10,那么顶部留白就是15。
@property(nonatomic,getter=isLayoutMarginsRelativeArrangement) BOOL layoutMarginsRelativeArrangement;
@end