主要观点:
.layoutPriority
修饰符在 SwiftUI 布局系统中起初看似不起眼,但在关键时候能影响视图的大小分配。- 不同布局容器对
layoutPriority
的解释和应用方式不同,理解各容器的规则是掌握 SwiftUI 布局的关键。 - 在
HStack
和VStack
中,高优先级视图在空间紧张时会占据更多空间,且VStack
对“贪婪”和“非贪婪”视图的处理方式不同。 - 在
ZStack
中,layoutPriority
会影响容器的最终布局大小,它会计算包含所有高优先级视图的最小对齐尺寸作为自身所需尺寸。
关键信息:
Apple
官方文档定义.layoutPriority
为设置父布局给子视图分配空间的优先级。- 在
HStack
和VStack
中,可给视图分配数字优先级,空间紧张时高优先级视图占更多空间,VStack
会先满足所有非贪婪视图,再比较贪婪视图的layoutPriority
。 - 在
ZStack
中,它会计算包含所有高优先级视图的最小对齐尺寸作为自身所需尺寸,可通过调整子视图优先级让ZStack
自动调整大小。 - SwiftUI 已存在七年,官方文档常只提供片段信息,需通过实验、开源项目等方式理解布局细节。
重要细节:
- 在
HStackDemoView
示例中,两个不同优先级的Text
视图在空间不足时显示出大小差异。 - 在
VStackDemo
示例中,不同优先级的Rectangle
和Text
视图在垂直空间分配上的表现。 - 在
ZStackDemo
示例中,不同优先级的Rectangle
视图在ZStack
中的布局情况,以及通过调整对齐方式和优先级实现动态调整ZStack
大小的效果。在SwitchDemo
示例中,通过ZStack
和layoutPriority
实现根据选择动态调整子视图大小和ZStack
自身大小的效果。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。