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

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.xdnf.cn/news/18814.html

相关文章:

  • 飞算JavaAI:Java开发新时代的破晓之光
  • 【软考论文】论面向对象建模方法(动态、静态)
  • Go函数详解:从基础到高阶应用
  • 数据结构:单向链表的逆置;双向循环链表;栈,输出栈,销毁栈;顺序表和链表的区别和优缺点;0825
  • Java的四种优化资源密集型任务的策略
  • 每日一题——力扣498 对角线遍历
  • CentOS 部署 Prometheus 并用 systemd 管理
  • Mistral AI音频大模型Voxtral解读
  • 初识神经网络——《深度学习入门:基于Python的理论与实现》
  • QT(1)
  • 【STM32】CubeMX(十二):FreeRTOS消息队列
  • THM Rabbit Hole
  • COREDUMP
  • Life:Internship in OnSea Day 64
  • java基础(十五)计算机网络
  • 利用matlab实现CST超表面阵列的自动建模
  • TCP和UDP的使用场景
  • onnx入门教程(四)——ONNX 模型的修改与调试
  • 借Copilot之力,实现办公效率的跃升
  • Flink 滑动窗口实战:从 KeyedProcessFunction 到 AggregateFunction WindowFunction 的完整旅程
  • 交换机是如何同时完成帧统计与 BER/FEC 分析的
  • leetcode LCR 012.寻找数组的中心下标
  • 59 C++ 现代C++编程艺术8-智能指针
  • IO多路转接(select方案)
  • 测试用例如何评审?
  • `mysql_query()` 数据库查询函数
  • 如何监控ElasticSearch的集群状态?
  • THM trypwnme2
  • 【广告系列】流量归因模型
  • LeetCode热题100--102. 二叉树的层序遍历--中等