###UIStackView的介绍
第一次发博客,写的不好请原谅,哈哈,这些是我从网上东拼西凑学来的,哈哈,如果有疑问的话请联系我,这个我不会放图我这里有完整的Demo需要的联系我哦,我的邮箱是:xiaokang505@tom.com(请备注博客园)
1. UIStackView 是iOS9中新增的一个视图,用来管理一行或一列视图的组合。
2. 对于开发者来说堆栈视图(UIStackView)的引入值得一提。我知道对于一些开发者来说使用autolayout设计一些复杂的交互界面是比较困难的。UIStackView正好能帮助到并让我们的开发者的工作变得更容易些。UIStackView提供了一个高效的接口用于平铺一行或一列的视图组合。对于嵌入到StackView的视图,你不用再添加自动布局的约束了。Stack View管理这些子视图的布局,并帮你自动布局约束。也就是说,这些子视图能够适应不同的屏幕尺寸。此外,你可以嵌入一个stack View到另一个stack view中来创建更为复杂的用户界面。不要误解我的意思,这并不意味着你就不需要处理自动布局了。你仍旧要定义一些布局约束来约束stack view。它只是帮你节约了为每个UI元素创建约束的时间,同时它更容易的从布局中添加/删除一个视图。
###UIStackView的在故事版中的两种创建方法
1. 方法一:从控件面板中进行拖拽,在控件面板中一共有两个stackView,一个是Horizontal Stack View,这个是子视图水平依次排布另一个Vertical Stack View是子视图垂直排布,选中一个将其拖出
2. 方法二:将需要添加如UIStackView的视图全部选中点击水槽一样的按钮此时在出现了
* 注意:此时这个UIStackView无法改变大小(只要在UIStackView中存在视图就不能改变frame)我们可以为他添加约束,让StackView进行改变
###UIStackView的属性介绍
1. 这个是UIStackView的属性面板
* Axis:这个属性是改变UIStackView中的排布方式的属性,其中有水平排布与垂直排布
* Alignment:这个属性是其中子视图的位置摆布方式默认是填充摆布
* Fill:子视图填充他所在的位置(默认)
* Leading:子视图头部对齐
* Center:子视图居中对齐
* Trailing:子视图尾部对齐
* Distribution:子视图的大小
* Fill:子视图填充整个UIStackView
* Fill Equally:子视图填充空白区域并等分
* Fill Proportionally:按照目前相对位置进行填充
* Equal Spacing:等间距
* Spacing设置子视图之间的间距大小
* Baseline Relative:如果设置子视图间距的大小为基线到下一个视图的头部
注意点UIStackView其实是一个Container View他不能被渲染所以这个视图没有backgroundColor与drawRect方法
代码:
UIView *view1 = [[UIView alloc] init];
view1.backgroundColor = [UIColor redColor];
UIView *view2 = [[UIView alloc] init];
view2.backgroundColor = [UIColor orangeColor];
//创建一个水平的stackView子视图这个视图内置与大的StackView
UIStackView *subStackView = [[UIStackView alloc] initWithArrangedSubviews:@[view1,view2]];
subStackView.axis = UILayoutConstraintAxisHorizontal;
subStackView.alignment = UIStackViewAlignmentFill;
subStackView.distribution = UIStackViewDistributionFillEqually;
UIView *view3 = [[UIView alloc] init];
view3.backgroundColor = [UIColor brownColor];
UIView *view4 = [[UIView alloc] init];
view4.backgroundColor = [UIColor blueColor];
//将上面的子stackView添加到全局的stackView
UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[subStackView,view3,view4]];
stackView.translatesAutoresizingMaskIntoConstraints = NO;
stackView.axis = UILayoutConstraintAxisVertical;
stackView.alignment = UIStackViewAlignmentFill;
stackView.distribution = UIStackViewDistributionFillEqually;
[self.view addSubview:stackView];
//只有全局的stackView才去做自动布局,而子stackView不用去做自动布局,他会自动去适应屏幕
NSString *hVFL = @"H:|-space-[stackView]-space-|";
NSString *vVFL = @"V:|-space-[stackView]-space-|";
NSArray *hVFLs = [NSLayoutConstraint constraintsWithVisualFormat:hVFL options:NSLayoutFormatDirectionLeadingToTrailing metrics:@{@"space":@0} views:NSDictionaryOfVariableBindings(stackView)];
NSArray *vVFLs = [NSLayoutConstraint constraintsWithVisualFormat:vVFL options:NSLayoutFormatDirectionLeadingToTrailing metrics:@{@"space":@0} views:NSDictionaryOfVariableBindings(stackView)];
[self.view addConstraints:hVFLs];
[self.view addConstraints:vVFLs];
