美文网首页
UIStackView-Documentation

UIStackView-Documentation

作者: 内蒙小猿 | 来源:发表于2020-12-22 17:54 被阅读0次

    基于官方文档进行翻译,但不限于翻译。减少废话。

    Common Stack View Layouts 部分可以不看,没啥营养。

    Introduction (介绍)

    水平和竖直方向对给集合内的 Views 进行布局


    Overview (概述)

    通过 addArrangedSubview 方法把 Views 添加到 UIStackView , 一般不需要写 Views 的布局。如果想改 Views 的布局可以通过UIStackView的属性,比如 axisdistributionalignmentspacingisLayoutMarginsRelativeArrangement

    Stack View and Auto Layout

    Stack View 和自动布局

    Views 布局默认是依赖 UIStackView 的 axis 方向的 edges, 如果想和 edges 有间距。可以把 isLayoutMarginsRelativeArrangement 设为 true, 并且设置好 layoutMargins 的值。

    UIStackView 沿着坐标轴进行布局默认是通过 intrinsicContentSize 进行布局的。

    对于 distribution 属性,只有 fillEqually 是把所有 View的长度都拉伸到,最长 View 的 intrinsicContentSize 的尺寸,理解成宽(沿着 axis)。

    对于 alignments 属性,只有 fill 是把所有 View 垂直 axis 的高度都拉伸到,最高的 View 的 intrinsicContentSize 的尺寸,理解成高(垂直 axis)。


    Positioning and Sizing the Stack View

    Stack View 的位置和大小

    固定 UIStackView 的两个边即可,其它会根据内容计算。

    • 沿着 axis 宽是所有 View 的长加上间隙
    • 垂直 axis 高是最高的那个 View 的高
    • isLayoutMarginsRelativeArrangement 为 true ,还需要加上 margins 。

    对于 baseline , UIStackView 的 forFirstBaselineLayoutforLastBaselineLayout 属性,返回的都是内嵌 View 的值(baseline 是基于 intrinsicContent 的,如果有压缩和拉伸会有显示错误)。


    Common Stack View Layouts

    Stack View通用约束

    • Define the position only
      只固定位置约束,UIStackView 的宽和高(seize)会自由伸缩。这种情况适用于内容自适应。

    • Define the stack’s size along its axis
      给定三个约束,未约束的边就会自由变化。适用于内容指定方向伸缩。

    • Define the stack’s size perpendicular to its axis
      给定垂直 axis 方向两个约束和 axis 方向一个约束, UIStackView 就会在 axis 未约束的方向进行伸缩。

    • Define the size and position of the stack view
      这个没啥好说的, 坐标和位置都固定的使用方式。


    Managing the Stack View’s Appearance

    管理Stack View的外观

    • note:
      注意约束冲突的前提下,可以 UIStackView 嵌套 UIStackView 并指定约束。

    Maintaining Consistency Between the Arranged Views and Subviews

    Arranged Views 与 Subviews 一致性

    arrangeSubviews property 是 subviews property 的 子集,并且 stack views 有如下强制规则:

    • 添加到 arrangedSubviews 的 views, 也会添加到 subviews 中。
    • subview 从 stackview 移除,也会在 arrangedSubviews 中移除。
    • 从 arrangedSubviews 中移除 view 并不会在层级结构中移除 , stackview 不会管理 view 的位置和大小,如果 view 能被现实,则在UI 层面可见。

    虽然 arrangeSubviews property 是 subviews property 的 子集,但是 顺序 是独立的:

    • arrangeSubviews 索引等级低的索引先显示,水平方向就是自左向右,竖直方向就是自上而下。
    • subviews 索引等级高的先显示,后加入的最先显示。

    Dynamically Changing the Stack View’s Content

    动态改变 Stack View 的内容

    arrangeSubviews 的 增、删、插入操作 ,已布局 view 的 isHiddle 属性更改以及 UIStackView 的属性变更,都会自动更新约束。

    • note:
      arrangeSubviews 删除操作,不会从父视图中删除UI,仅仅是删除了 arrangeSubviews 数组中的元素和层级没有关系。
    • isHiddle 属性更改
     let firstView = stackView.arrangedSubviews[0]
     firstView.isHidden = true
    

    -stackview 的任何属性更改,都会自动更新约束

    // 在 vertical 和 horizontal 之间切换
    if stackView.axis == .Horizontal {
        stackView.axis = .Vertical
    }
    else {
        stackView.axis = .Horizontal
    }
    
    • 你可以给多个 view 更改属性,stackview 会在size改变时,自动给改变加上动画。
    UIView.animateWithDuration(0.25) { () -> Void in
        let firstView = stackView.arrangedSubviews[0]
        firstView.isHidden = true
    }
    

    相关文章

      网友评论

          本文标题:UIStackView-Documentation

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