SwiftUI中layoutPriority值的作用机制及无变化问题咨询
为什么SwiftUI的layoutPriority从1改回0没变化?
默认优先级就是0,无竞争则没变化
layoutPriority的默认值本来就是0,要是你把目标视图改回0之后,同一布局容器里的其他视图优先级也都是0,那所有视图会按默认规则(比如HStack/VStack的默认空间分配)排列,和你设1之前的状态完全一致,当然看不出变化。只有当同一容器里存在不同优先级的视图,而且容器空间不够的时候,优先级高的视图才会优先拿到足够空间,低优先级的会被压缩。容器空间足够,优先级没机会生效
要是你的布局容器(比如HStack/VStack)有足够空间装下所有视图的内容,不管你设多少优先级,视图都不会被压缩或者拉伸,这时候改优先级就不会有视觉变化。比如你给每个视图都设了固定尺寸,或者容器本身宽度够大,所有视图都能完整显示,优先级根本发挥不了作用。修饰的视图不在同一个布局竞争层级
要是你把layoutPriority加在了嵌套的容器上,而不是直接加在需要抢空间的视图上,也可能看不到变化。比如你先把优先级加在某个嵌套的VStack上,后来改了这个VStack的优先级,但实际需要竞争空间的是里面的Text视图,那改外层容器的优先级不会影响内层视图的空间分配。
举个实际例子,当HStack宽度不够时,设优先级1的文本会优先显示完整,改回0后,两个文本会被平等压缩:
HStack { Text("这是一段很长很长的文本,用来测试布局优先级") .layoutPriority(1) // 改成0后,两个文本会一起被压缩 Text("短文本") } .frame(width: 200) // 只有空间不足时,优先级才会生效
要是把frame去掉,HStack有足够空间,不管设1还是0,两个文本都能完整显示,自然看不到变化。
内容的提问来源于stack exchange,提问作者Mostafa Shamin Yeasar
相关产品推荐
相关产品推荐

