【UIKit】UIStackView

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));

你可能感兴趣的:(【UIKit】UIStackView)