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吧,总是拉约束到一半嫌烦放弃了 ..
本文介绍了iOS9中引入的UIStackView,它简化了UI控件的布局工作,通过少量约束即可实现复杂的界面排列。作者通过实例展示了如何使用UIStackView创建九宫格,并讨论了其在StoryBoard中的优势,指出对于自动布局(AutoLayout)的学习不应放弃。
206

被折叠的 条评论
为什么被折叠?



