主题
这期我想给大家讲讲iOS中的线性布局,我想做过Android的朋友都熟悉线性布局,非常好用快捷强大,而我们iOS9官方也推出了类似线性布局的框架UIStackView,好下面我们详细介绍这个UIStackView。
UIStackView介绍
我相信很多做iOS的同学都还没正式开始使用这个框架吧,因为它最低支持iOS9,很显然我们App很多都需要支持iOS7甚至iOS6。UIStackView是一种快速UI布局框架(水平/垂直方向)根据参数自动约束子视图,能大大提高我们开发效率。使用UIStackView我们不需要对添加其中的子视图添加约束了,取而代之的是你需要设置一些很有描述性的属性,比如坐标(Axis)、间隔(Spacing)、对齐(Alignment)以及分布(Distribution )等。自然的,你可以在属性设置面板上来配置,这样你就可以通过鼠标轻松的制作出在所有iOS设备上都还不错的用户界面了。
下面我们看看这个使用UIStackView的例子:
实现代码如下:

  • (void)viewDidLoad {
    [super viewDidLoad];
    // 创建StackView实例
    UIStackView containerView = UIStackView.new;
    [self.view addSubview: containerView];
    // 对StackView添加约束
    containerView.whc_LeftSpace(0)
    .whc_TopSpace(100)
    .whc_RightSpace(0)
    .whc_Height(200);
    /// 设置布局方向水平
    containerView.axis = UILayoutConstraintAxisHorizontal;
    /// 设置子视图分布StackView比例相等
    containerView.distribution = UIStackViewDistributionFillEqually;
    /// 设置子视图之间间隙为10
    containerView.spacing = 10;
    /// 设置子视图填充StackView
    containerView.alignment = UIStackViewAlignmentFill;
    /// 往StackView里面添加4个子视图
    for (NSInteger i = 0; i < 4; i++) {
    UIView
    view = [[UIView alloc] init];
    view.backgroundColor = [UIColor colorWithRed:random()%256/255.0 green:random()%256/255.0 blue:random()%256/255.0 alpha:1];
    [containerView addArrangedSubview:view];
    }
    }复制代码上面使用约束布局库WHC_AutoLayout
    UIStackView总结
    我们现在可以看到UIStackView确实给我们开发带来了很多方便,但是它也有两个不足的地方:(1)由于只支持iOS9以上的系统,这让我们兼容很困难。(2)只支持水平和垂直方向,有时候我们需要向九宫格一样的布局(同时具有水平和垂直方向布局),这就有点不方便。(3)布局参数理解比较困难,表达不够清楚(可能是我的问题,呵呵。。。)
    WHC_StackView介绍
    我根据上面3点不足我自己就开始了构造类似UIStackView的计划名为:WHC_StackView。首先WHC_StackView是完全基于自动布局库WHC_AutoLayout而开发也是其中的一个子模块,所以WHC_StackView有Swift,OC版本。
    优点
    (1)支持iOS6以上系统(2)支持水平/垂直和同时水平垂直布局(类似九宫格)(3)支持自动分割线设置(3)简单清晰的参数配置
    例子
  • (void)viewDidLoad {
    [super viewDidLoad];
    WHC_StackView * stackView = [WHC_StackView new];
    [self.view addSubview: stackView];

    /// 一行代码添加约束
    stackView.whc_LeftSpace(10)
    .whc_TopSpace(10)
    .whc_RightSpace(10)
    .whc_Height(100);

    /// 配置StackView
    stackView.whc_Edge = UIEdgeInsetsMake(10, 10, 10, 10); // 内边距
    stackView.whc_Orientation = All; // 自动水平垂直混合布局
    stackView.whc_HSpace = 10; // 子视图横向间隙
    stackView.whc_VSpace = 10; // 子视图垂直间隙
    stackView.whc_Column = 2; // 设置水平子视图为2列

    /// 向StackView中添加4子视图
    for (int i = 0; i < 4; i++) {
    UIView * view = UIView.new;
    [stackView addSubview:view];
    }
    /// 开始进行布局
    [stackView whc_StartLayout];
    }复制代码Demo

支持分割线设置的WHC_StackView(水平,垂直,水平垂直方向)

自动宽高的WHC_StackView

结束
WHC_StackView开源地址:github.com/netyouli/WH…

如果您在使用过程中有任何问题,欢迎issue me!
很乐意为您解答任何相关问题!
与其给我点star,不如向我狠狠地抛来一个BUG!
如果您想要更多的接口来自定义或者建议/意见,欢迎issue me!我会根据大家的需求提供更多的接口!

作者:WHC
链接:https://juejin.im/post/586b546c1b69e60063f4f345
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表评论

邮箱地址不会被公开。 必填项已用*标注