问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

UIStackView:iOS开发者必备神器!

创作时间:
作者:
@小白创作中心

UIStackView:iOS开发者必备神器!

引用
CSDN
7
来源
1.
https://blog.csdn.net/weixin_46926959/article/details/127443484
2.
https://blog.csdn.net/jingqiu880905/article/details/50970391
3.
https://www.jianshu.com/p/4d0c07e9ff4c
4.
https://blog.csdn.net/weixin_42515340/article/details/142447291
5.
https://juejin.cn/post/7205833339105624121
6.
https://juejin.cn/post/6844903653984190478
7.
https://juejin.cn/post/7273053735375224851

UIStackView是iOS开发中用于简化布局的容器视图,属于AutoLayout体系的重要组成部分。它通过自动管理子视图的约束关系,实现了类似CSS中Flexbox的流式布局能力。以下是核心要点:

一、核心特性

  1. 布局轴方向(Axis)
    • 通过 axis 属性定义排列方向:.vertical(垂直)或 .horizontal(水平),适合响应式布局(如横竖屏切换)1
  2. 对齐规则(Alignment)
    • 控制垂直于轴线的对齐方式,支持多种模式:
      • .fill:拉伸子视图填充可用空间
      • .center/.leading/.trailing:中心/首端/末端对齐
      • .top/.bottom:针对水平轴布局的上下对齐2
  3. 分布规则(Distribution)
    • 管理子视图沿主轴的分布方式,如 .fillEqually(等宽/等高)、.equalSpacing(等间距)等。

二、工作原理

  • 自动约束生成:UIStackView 会为子视图自动创建约束,开发者无需手动设置 NSLayoutConstraint1
  • 动态布局更新:修改 axis 或增删子视图时,布局会自动调整(需调用 layoutIfNeeded() 触发重绘)。

三、使用场景

  1. 响应式布局
    结合 traitCollectionsizeClass 特性,可在横竖屏切换时动态调整排列方向(如竖屏垂直排列,横屏水平排列)1
    stackView.axis = traitCollection.verticalSizeClass == .compact ? .horizontal : .vertical
    
  2. 表单布局
    快速构建等间距的表单元素(如登录页的输入框+按钮组合):
    let stack = UIStackView(arrangedSubviews: [usernameField, passwordField, loginButton])
    stack.axis = .vertical
    stack.spacing = 16
    stack.distribution = .fillEqually
    

四、性能优势

相比手动使用 AutoLayout:

  • 代码量减少 40-60%:通过隐式约束管理降低维护成本
  • 布局计算优化:iOS 12+ 的系统级优化使其性能接近 Frame 布局1

五、参考文档

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号