探索 SwiftUI ZStack 中 layoutPriority 的秘密

主要观点

  • .layoutPriority修饰符在 SwiftUI 布局系统中起初看似不起眼,但在关键时候能影响视图的大小分配。
  • 不同布局容器对layoutPriority的解释和应用方式不同,理解各容器的规则是掌握 SwiftUI 布局的关键。
  • HStackVStack中,高优先级视图在空间紧张时会占据更多空间,且VStack对“贪婪”和“非贪婪”视图的处理方式不同。
  • ZStack中,layoutPriority会影响容器的最终布局大小,它会计算包含所有高优先级视图的最小对齐尺寸作为自身所需尺寸。

关键信息

  • Apple官方文档定义.layoutPriority为设置父布局给子视图分配空间的优先级。
  • HStackVStack中,可给视图分配数字优先级,空间紧张时高优先级视图占更多空间,VStack会先满足所有非贪婪视图,再比较贪婪视图的layoutPriority
  • ZStack中,它会计算包含所有高优先级视图的最小对齐尺寸作为自身所需尺寸,可通过调整子视图优先级让ZStack自动调整大小。
  • SwiftUI 已存在七年,官方文档常只提供片段信息,需通过实验、开源项目等方式理解布局细节。

重要细节

  • HStackDemoView示例中,两个不同优先级的Text视图在空间不足时显示出大小差异。
  • VStackDemo示例中,不同优先级的RectangleText视图在垂直空间分配上的表现。
  • ZStackDemo示例中,不同优先级的Rectangle视图在ZStack中的布局情况,以及通过调整对齐方式和优先级实现动态调整ZStack大小的效果。在SwitchDemo示例中,通过ZStacklayoutPriority实现根据选择动态调整子视图大小和ZStack自身大小的效果。
阅读 13
0 条评论