UIStackView学习

本文介绍了iOS9中引入的UIStackView,它简化了UI控件的布局工作,通过少量约束即可实现复杂的界面排列。作者通过实例展示了如何使用UIStackView创建九宫格,并讨论了其在StoryBoard中的优势,指出对于自动布局(AutoLayout)的学习不应放弃。

1.什么是UIStackView?
答:在iOS9中苹果在UIKit框架中引入了一个新的视图类-UIStackView。UIStackView类可以帮我们布局UI控件,而我们不需要设置任何约束或设置很少的约束就可以,其他都由UIStackView帮我们自动完成了。
我的理解:非常强大的管理控件的类,可以减少约束的繁琐

2.(1)根据http://www.cocoachina.com/ios/20150623/12233.html的介绍,用OC代码实现了一下

horizontalStackView = [[UIStackView alloc]initWithFrame:CGRectMake(0, HEIGHT - 110, WIDTH, 110)];
horizontalStackView.alignment = UIStackViewAlignmentCenter;
//    布局方式,水平和竖直
horizontalStackView.axis = UILayoutConstraintAxisHorizontal;
//    UIStackViewDistributionFill = 0,
//    等距排列
    horizontalStackView.distribution = UIStackViewDistributionFillEqually;
    [self.view addSubview:horizontalStackView];

(2)添加”添加”与”移除”按钮
添加按钮方法:

-(void)pressBtn:(id)sender{
//    NSLog(@"Add");
    UIImage * image = [UIImage imageNamed:@"huaji.jpg"];
    UIImageView * iv = [[UIImageView alloc]init];
    iv.image = image;
//    等比例
    iv.contentMode = UIViewContentModeScaleAspectFit;
//    给StackView添加subView
    [horizontalStackView addArrangedSubview:iv];


    [UIView animateWithDuration:0.25 animations:^{
        [horizontalStackView layoutIfNeeded];
    }];

//    得到滑稽数量
    NSLog(@"%lu",(unsigned long)horizontalStackView.arrangedSubviews.count);
}

移除按钮方法:

-(void)removeHuaji:(id)sender{
//    NSLog(@"Remove");
//    获取StackView管理对象
    UIImageView * iv = horizontalStackView.arrangedSubviews.lastObject;
    if (iv) {
        [horizontalStackView removeArrangedSubview:iv];
        [iv removeFromSuperview];
        [UIView animateWithDuration:0.25 animations:^{
            [horizontalStackView layoutIfNeeded];
        }];
    }
    NSLog(@"%lu",(unsigned long)horizontalStackView.arrangedSubviews.count);
}

3.利用UIStackView实现九宫格

    stackView1 = [[UIStackView alloc]initWithFrame:CGRectMake(0, 220, WIDTH, 150)];

//    对齐方式,center的话有可能不填满
    stackView1.alignment = UIStackViewAlignmentFill;

//    间距
//    stackView1.spacing = 10.0;
//    水平
    stackView1.axis = UILayoutConstraintAxisHorizontal;
//    非常重要
    stackView1.distribution = UIStackViewDistributionFillEqually;
    [self.view addSubview:stackView1];

    for (NSUInteger i = 0; i<3; i++) {
        UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
        UIImage * image = [UIImage imageNamed:arr1[i]];
        [btn setBackgroundImage:image forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(pressBtn:) forControlEvents:UIControlEventTouchUpInside];
        //把btn添加到StackView管理对象里
        [stackView1 addArrangedSubview:btn];
    }

点击方法

-(void)pressBtn:(id)sender{

//    获取管理对象,在btn的点击方法里添加点击方法(怎么有点怪..)
    UIButton * btn1 = stackView1.arrangedSubviews[0];
    [btn1 addTarget:self action:@selector(pressBtn1:) forControlEvents:UIControlEventTouchUpInside];
}

-(void)pressBtn1:(id)sender{
    NSLog(@"press1");
}

4.总结:只有在StoryBoard里利用才能达到减少代码的目的,上面的方法,还是太蠢了..周末再学一下autoLayout吧,总是拉约束到一半嫌烦放弃了 ..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值