Layout相关的组件有6个
GridLayoutGroup,VerticalLayoutGroup,HorizontalLayoutGroup,ContentSizeFitter,AspectRatioFitter,LayoutElement
讲一些大家不知道的
AspectRatioFitter
这个组件实际使用手感其实挺废的,效果是用于固定当前组件的比例,而且这个组件不推荐父节点有LayoutGroup相关的组件,实际效果其实倒也一般。
这个组件有5中模式,除了第一个为空之外,其余四个为,宽度控制,高度控制,内切父节点,外切父节点
有用一个参数,比例,上手试一下就知道了,不是很实用的组件
VerticalLayoutGroup,HorizontalLayoutGroup
这两个我认为拼UI的同学已经用了挺多的了,相关的参数应该也是不难理解,就不多写了,如果有需要再补充
重点:LayoutElement
MinWidth,MinHeight(以下这一组简写为MinWH)
看字面很好理解,最小值,设置之后如果layout系统控制了当前节点,那么当前节点的宽高的最小值就不会小于设置的值,这个值优先级很高。甚至盖过PreferredWH。
PreferredWidth,PreferredHeight(以下这一组简写为PreferredWH)
字面意思为优先宽高,他是作为一个最大值存在的,有时候又作为一个保底值的存在,但是优先级不是很高。
用例子来说明这个值的效果。
父节点开启Control ChildSize,控制子节点的高度,但是不勾选Child Force Expand(子节点拓展充满容器),那么这个值就会变成最大值。
当你扩大容器的时候,容器大小超过所有子节点的 PreferredWH的和,那么所有子节点的大小就会达到 PreferredWH,不会再扩大
当你压缩容器大小的时候,节点大小就会无限接近MinWH,那么这个值是多少呢
假设父节点容器大小为160,Spacing为10,A节点PreferredWH为200,MinWH为100,B节点PreferredWH为200,MinWH不开启或为0(不开启默认为0)
通过观察可得,父节点的高度减去Spacing再减去所有节点的MinWH剩下的值,会被按比例分配给每个剩下的节点,按照PreferredWH-MinWH得出的值为权重分配。
那么AB节点得到的比例就为1:2(200-100:200)
那么A的宽高就为(160-10(Spacing)-100(A的MinWH)) x (1/3)+100(A的MinWH)=50 / 3 + 100 = 116.667
那么B的宽高就为(160-10(Spacing)-0(B的MinWH)) x (2/3)+0(B的MinWH)= 33.334
而当你父节点打开Child Force Expand的时候,这个值就没有什么意义了。
FlexibleWidth,FlexibleHeight
最有意思也是最难理解的,这个是一个比例一样的东西
还是分为容器是否打开Child Force Expand
当容器关掉Child Force Expand的时候,这个值就变成了一个占据比例,开启了这个属性的节点会分配容器剩余的大小。
容器大小设置为700。
可以看到,两个节点的PreferredWH大小都为200,这个时候PreferredWH则不为最大值,为保底值,那么700的容器就剩下300可分配,A节点的 FlexibleWH为2,B节点为1,那么按照2:1的比例,A的最终大小为400,B为300。
在这种情况下,如果不启用FlexibleWH,那么就默认这个节点的FlexibleWH为0。
另外一种情况就是打开Child Force Expand了
打开之后,所有子节点最小FlexibleWH为1,无论有没有开启都为1,怎么调整都无法小于1。其余用法基本相同,
LayoutPriority
有些意义不明吧,优先级,同一个节点上面的不同layout组件的优先级,也能想到应用场景。
从程序上来说,图片Image和文本Text也属于layout系统的,然后图片和文本也有自己的大小计算方式,
比如说图片的preferredWH是自己的图片的大小。这时候如果加上layoutElement,那么系统就会不知道使用哪一套方案,所以这时候优先级就起作用了。
优先级越高的方案会被使用,图片和文本默认为0,如果layoutElement的LayoutPriority设置为-1,那么就可以看到当前节点的preferredWH会被图片和文本控制了,当图片和文本关闭的时候,layoutElement才会生效。
具体应用场景有些意义不明。