当前位置: 首页 > news >正文

iOS 开发中的 UIStackView 使用详解

目录

iOS 开发中的 UIStackView 使用详解

前言

一、UIStackView 是什么?

二、常用属性

1. axis

2. distribution

1.fill

2.fillEqually

3.fillProportionally

4.equalSpacing

5.equalCentering

3. alignment

1.fill(默认,填充对齐)

2.leading/.top

3.trailing/.bottom

4.center

5.firstBaseline

6.lastBaseline

4. spacing

5. isLayoutMarginsRelativeArrangement

三、UIStackView 的初始化与用法

1. 基本初始化

2. 添加到父视图并设置约束

四、动态操作子视图

1.addArrangedSubview        

2.removeArrangedSubview

3.insertArrangedSubview

五、UIStackView 使用技巧


iOS 开发中的 UIStackView 使用详解

前言

        在 iOS 开发中,界面布局往往是最耗时的一部分。UIStackView 是苹果自 iOS 9 推出的一个强大布局容器,它能极大简化界面的排版逻辑,让我们无需编写大量的 Auto Layout 约束,就能轻松实现响应式布局。本文将带你系统学习 UIStackView 的用法。

一、UIStackView 是什么?

        UIStackView 是 UIView 的子类,它的主要作用是将一组子视图按照水平或垂直方向自动排列,并根据属性控制子视图的尺寸、间距和对齐方式。

        不需要为子视图单独写复杂的 Auto Layout 约束;

        适合构建线性布局(水平/垂直);

        与 Auto Layout 完美结合,能自动适应屏幕尺寸和内容变化。

二、常用属性

1. axis

        决定排列方向:

stackView.axis = .horizontal   // 水平排列
stackView.axis = .vertical     // 垂直排列

图1.UIStackView实现横向布局和纵向布局

2. distribution

        决定子视图在主轴方向上的分布方式,可以结合alignment属性和spacing属性获得更灵活的布局效果。

1.fill

        默认主轴方向的对齐方式。

2.fillEqually

        等宽/高布局。

3.fillProportionally

        按照子视图的固有尺寸比例分配空间。

4.equalSpacing

        保持子视图中心点间距相等​(视图尺寸不变,自动调整间隙)

5.equalCentering

        我这里写了一个demo,用来展示它们之间的对齐方式。        

图2.distribution的主轴对齐方式

3. alignment

        alignment属性决定了UIStackView中排列的子视图在垂直于堆栈轴方向上的对齐方式。简单来说:

        如果UIStackView是水平方向(.horizontal)alignment控制的是子视图的垂直对齐​。

        如果UIStackView是垂直方向(.vertical),alignment控制的是子视图的水平对齐。​

1.fill(默认,填充对齐)

        默认值,子视图会尽可能填充 StackView 的交叉轴方向。

2.leading/.top

        子视图在交叉轴的起始边对齐。

        水平布局时 → 子视图靠上对齐。

        垂直布局时 → 子视图靠左对齐。

3.trailing/.bottom

        子视图在交叉轴的结束边对齐。

        水平布局时 → 子视图靠下对齐。

        垂直布局时 → 子视图靠右对齐。

4.center

        子视图在交叉轴方向居中对齐

5.firstBaseline

        基于文字的基线对齐。

6.lastBaseline

       和 .firstBaseline 类似,但会基于最后一行文字的基线对齐。

        这里我写了一个demo,用来演示alignmeng的各种属性。

图3.alignment的各种设置

4. spacing

        设置UIStackView子视图之间的间距。

5. isLayoutMarginsRelativeArrangement

        isLayoutMarginsRelativeArrangement是一个布尔值属性,用于控制 UIStackView如何计算其子视图的布局边界。

        默认属性设置为false:子视图的布局相对于UIStackView的边界(bounds)。

        当设置为true:子视图的布局相对于UIStackView的布局边距(layoutMargins)。

三、UIStackView 的初始化与用法

1. 基本初始化

let label1 = UILabel()
label1.text = "苹果"
let label2 = UILabel()
label2.text = "香蕉"
let label3 = UILabel()
label3.text = "橙子"let stackView = UIStackView(arrangedSubviews: [label1, label2, label3])
stackView.axis = .horizontal
stackView.spacing = 8
stackView.distribution = .fillEqually

2. 添加到父视图并设置约束

view.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])

四、动态操作子视图

        UIStackView 并不直接管理子视图,而是通过 arrangedSubviews 属性管理。        

1.addArrangedSubview        

        动态增加UIStackView子视图。

2.removeArrangedSubview

        动态移除UIStackView子视图。

3.insertArrangedSubview

        动态增加UIStackView子视图。

        我们可以结合UIView的动态实现动态操作UIStackView子视图的各种操作。

图4.动态操作UIStackView子视图

五、本文demo

        本文代码在这里。

http://www.dtcms.com/a/351156.html

相关文章:

  • Linux-服务器初始化
  • RHEL8.6环境下批量验证服务器凭据并配置Ansible免密管理全流程
  • 用wp_trim_words函数实现WordPress截断部分内容并保持英文单词完整性
  • Ansible 文件管理与 Jinja2 模板全解析:从模块应用到动态配置生成
  • Ansible核心技巧:循环条件与错误处理
  • nginx代理 flink Dashboard、sentinel dashboard的问题
  • HarmonyOS之深入了解装饰器
  • 服务器初始化流程***
  • Rust 符号体系全解析:分类、应用与设计意图
  • CentOS 7 升级 OpenSSL 3.5.1 的详细教程
  • 【Linux】Socket编程——TCP版
  • 【Python】shutil.make_archive() 方法详解
  • 支持向量机(SVM)核心原理与应用解析
  • SOME/IP-SD规范中,对 服务(Service) 和 实例(Instance)的理解
  • 多模态RAG架构:下一代跨模态智能检索系统的设计与实践
  • 机器视觉学习-day03-灰度化实验-二值化和自适应二值化
  • 使用C++与Qt6,在windows上打造MacOS风格桌面应用窗口
  • PDF文件中的相邻页面合并成一页,例如将第1页和第2页合并,第3页和第4页合并
  • Mac测试端口连接的几种方式
  • 如何将视频从安卓设备传输到Mac?
  • Mac安装mitmproxy及操作对监控的请求
  • 少儿舞蹈小程序详细设计文档
  • Mac中修改Word的Normal.dotm文件
  • 使用Uniapp开发小程序,如何引入插件组件!
  • 三电平buckboost电路出现上下母线不平衡是什么原因
  • Linux驱动开发笔记(八)——按键输入实验
  • 滚珠导轨如何定义半导体制造精度?
  • 【LeetCode 热题 100】75. 颜色分类——双指针
  • 算法题打卡力扣第209题:长度最小的子数组(mid)
  • 计算神经科学数学建模编程深度前沿方向研究(中)