美文网首页
初识UIStackView

初识UIStackView

作者: linatan | 来源:发表于2016-05-28 19:43 被阅读349次

Stack View提供横向和纵向的线性布局功能,管理着所有在它的 arrangedSubviews数组中的所有子视图,会自动对这些子视图进行布局处理。

属性

stackView中的布局情况是根据其axis,alignement,distribution,spacing等其他属性共同决定。

a. Axis:stackview布局的轴向,分为垂直和水平


uistackview-axis

b. Alignment:决定了Stack View如何沿它轴向的垂直方向摆放它的subview,水平轴向和垂直轴向会有所不同。

UIStackViewAlignment 含义 展示
UIStackViewAlignmentFill 在StackView轴向的垂直方向上拉伸所有子view来填充StackView uistackview-align-fill
UIStackViewAlignmentLeading 用于stackview是垂直轴向时,所有子view靠左对齐 uistackview-align-leading
UIStackViewAlignmentTop 用于stackview是水平轴向时,所有子view靠顶部对齐 uistackview-align-top
UIStackViewAlignmentCenter 在StackView轴向的垂直方向上子视图以中线为基准对齐 uistackview-align-center
UIStackViewAlignmentTrailing 用于stackview是垂直轴向时,所有子view靠右对齐 uistackview-align-trailing
UIStackViewAlignmentBottom 用于stackview是水平轴向时,所有子view靠底部对齐 uistackview-align-bottom
UIStackViewAlignmentFirstBaseline 用于stackview是水平轴向时,按照第一个子视图中文字的第一行对齐 uistackview-align-firstBaseline
UIStackViewAlignmentLastBaseline 用于stackview是水平轴向时,按照最后一个子视图中文字的最后一行对齐 uistackview-align-lastBaseline

c. Distibution:决定子视图的分布比例

UIStackViewDistribution 含义 展示
UIStackViewDistributionFill 默认,在StackView轴向延伸方向上缩放子View,使得所有子View能填充完StackView,如果子Views超出StackView,根据其compression resistance 优先级进行压缩;如果子Views不能填充完StackView,根据于其hugging优先级进行放大;如果相等的话,则按照arrangedSubviews数组中index顺序 uistackview-distrubute-fill
UIStackViewDistributionFillEqually 在StackView延伸方向上使每个子View都一样长 uistackview-distrubute-fillequal
UIStackViewDistributionFillProportionally 在StackView延伸方向上根据子View的实际内容按比例进行缩放 uistackview-distrubute-fillProp
UIStackViewDistributionEqualSpacing 在StackView延伸方向上将子Views间隔相等的空白进行缩放,如果子Views不能填充完StackView,则用空白填充子views之间;如果子Views超出StackView,则根据compression resistance优先级进行压缩;如果相等的话,则按照arrangedSubviews数组中index顺序 uistackview-distrubute-equalSpacing
UIStackViewDistributionEqualCentering 在StackView延伸方向上将子Views的中心线等距进行缩放,如果子View不能填充完StackView,则用空白填充子views之间;如果子View超出StackView,先缩小子views间隔直到其spacing属性定义的最小值;若还是超出,则根据compression resistance优先级进行压缩;如果相等的话,则按照arrangedSubviews数组中index顺序 uistackview-distrubute-equalCenter

d. Spacing:决定子视图的间隔距离
e. 如下图是 水平轴向的stackview属性标注


水平轴向的stackview属性标注

实现

stroyboard中利用stackview

  1. 效果展示


    stackview展示01
    stackview展示02
  2. 屏幕适配Size Classes


    stackview展示03-1
    stackview展示03-2

将屏幕横过来效果并不是很好,可以借用size classes实现成这样:


stackview展示03-3

sizeclass是对设备的一种抽象。它不再有尺寸、横屏和竖屏的概念,把设备分为紧凑Compact、普通Regular,ios设备和对应的size classes如下图:


sizeclass

ipad是 regular width + regular height

横屏的iphone 6 Plus是 regular width + compact height

竖屏的iphone是 compact width + regular height

横屏的iphone是 compact width + compact height

所以实现上述效果需要在compact height时,stackview的由垂直轴向改为水平,如下图所示


modify

ios7兼容

官方的UIStackView是在iOS9以上系统才可以可以使用,但是有开源代码提供了ios7以上的系统实现了相应的功能:
OAStackView 基于objective-c实现

TZStackView 基于swift实现

参考资料

Stack Views 翻译版

size classes design help

初探 iOS8 中的 Size Class

iOS 9 UIStackView Free Tutorial

UIStackView教程:了解Stack View

Auto Layout Tutorial in iOS 9

UIStackView Tutorial: Introducing Stack Views 翻译版

相关文章

  • 初识UIStackView

    Stack View提供横向和纵向的线性布局功能,管理着所有在它的 arrangedSubviews数组中的所有子...

  • 【UIKit】UIStackView

    UIStackView UIStackView : UIViewiOS 9.0 基于 Flexbox 思想的布局方...

  • iOS9 新特新介绍

    一. UIStackView 新控件:UIStackView 栈视图, 类似AppleWatch的Group 父类...

  • StackView

    我的博客, 各位看官有时间赏光 UIStackView UIStackView介绍 随着autolayout的推广...

  • UIStackView的应用

    UIStackView的定义 UIStackView控件有两种,横向布局和纵向布局 Axis:设置UIStackV...

  • UIStackView 初探(译)

    UIStackView 用于在列或行中布局视图集合的线性接口。 UIStackView 概览 UIStackVie...

  • UIStackView的妙用

    UIStackView简介 UIStackView是iOS 9+支持的布局控件,主要用于线性布局,可以简化布局,减...

  • iOS9新特性UIStackView

    概述 UIStackView是iOS9中新增的API,类似于Android中的线性布局。UIStackView提供...

  • UIStackView简单理解和使用

    一、UIStackView简介 UIStackView是iOS9中新增的API,类似于Android中的线性布局。...

  • iOS UIStackView

    简介 UIStackView是iOS 9 的新增控件,唯一的作用就是帮助布局 本文会详细介绍UIStackView...

网友评论

      本文标题:初识UIStackView

      本文链接:https://www.haomeiwen.com/subject/yhofdttx.html