UIStackView
UIStackView : UIView
iOS 9.0
- 基于 Flexbox 思想的布局方式,所以过来看一下 API
- 简单来说就是个 View 容器,运用 AutoLayout 对内部视图自动添加约束,实现一些常用的布局
一、初始化
- (instancetype)initWithArrangedSubviews:(NSArray<__kindof UIView *> *)views;
- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
二、管理子视图
// 子视图
@property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *arrangedSubviews;
// 添加
- (void)addArrangedSubview:(UIView *)view;
// 移除
- (void)removeArrangedSubview:(UIView *)view;
// 插入
- (void)insertArrangedSubview:(UIView *)view atIndex:(NSUInteger)stackIndex;
三、约束配置
// 布局主方向
@property(nonatomic) UILayoutConstraintAxis axis;
// 对齐方式
@property(nonatomic) UIStackViewAlignment alignment;
// 分布方式
@property(nonatomic) UIStackViewDistribution distribution;
// 容器等间距值
@property(nonatomic) CGFloat spacing;
// 纵向布局时,是和以 baseline 为基准,默认 NO
@property(nonatomic,getter=isBaselineRelativeArrangement) BOOL baselineRelativeArrangement;
// 是否使用 LayoutMargin 标准,一般不用,默认 NO
@property(nonatomic,getter=isLayoutMarginsRelativeArrangement) BOOL layoutMarginsRelativeArrangement;
四、自定义间距
// 设置自定义间距
- (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));
// 无穷大
static const CGFloat UIStackViewSpacingUseDefault API_AVAILABLE(ios(11.0),tvos(11.0)) = FLT_MAX;
// 0
static const CGFloat UIStackViewSpacingUseSystem API_AVAILABLE(ios(11.0),tvos(11.0)) = FLT_MIN;
五、常量
- UIStackViewAlignment 对齐方式
typedef NS_ENUM(NSInteger, UIStackViewAlignment) {
// 填充方式(横纵)
UIStackViewAlignmentFill,
// 靠左(纵)
UIStackViewAlignmentLeading,
// 靠上(横)
UIStackViewAlignmentTop = UIStackViewAlignmentLeading,
// 靠上基线(横)
UIStackViewAlignmentFirstBaseline,
// 居中(横纵)
UIStackViewAlignmentCenter,
// 靠右(纵)
UIStackViewAlignmentTrailing,
// 靠下(横)
UIStackViewAlignmentBottom = UIStackViewAlignmentTrailing,
// 靠下基线(横)
UIStackViewAlignmentLastBaseline,
} API_AVAILABLE(ios(9.0));
- UIStackViewDistribution 填充方式
typedef NS_ENUM(NSInteger, UIStackViewDistribution) {
// 普通填充
UIStackViewDistributionFill = 0,
// 等宽(横)、高(纵)填充
UIStackViewDistributionFillEqually,
// 按比例适应屏幕
UIStackViewDistributionFillProportionally,
// 等间距
UIStackViewDistributionEqualSpacing,
// 等中心距
UIStackViewDistributionEqualCentering,
} API_AVAILABLE(ios(9.0));
网友评论