UIStackView详解


###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];


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM