浅析 ContentSizeFitter 以及 Horizontal Layout Group 嵌套问题

最近写UI时遇到一个问题,现在需要一个根据内容自动改变大小的信息显示列表,大致样子类似这样


其中描述词条可不断增加,外层又需要套一层Scroll View 进行滑动控制,这就要求整个列表按内容自动改变竖方向的大小。但实际在嵌套过程中遇到了问题。由于有多层的嵌套机制。存在一个问题,当这样的节点结构时,父节点TextRoot的大小是不能被控制的,因为只有子节点存在Text组件,可以自动处理大小,但是父节点的大小不能改变。又因为,在总节点上使用了Horizontal Layout Group 这个组件只能控制和遍历一层子节点,自动适应组件在textRoot节点下的text节点,textRoot不能自动改变大小,所以会出现错乱。
最终处理方法为新加一个脚本,让TextRoot父节点根据子物体控制大小改变。


ContentSizeFitter,于是去了解了一下ContentSizeFitter的源码。
ContentSizeFitter的主要流程如下:
实现了这个ILayoutElement接口的组件,会进行计算对应的min、preferred、flexible 属性(水平和竖直两个方向)。ContentSizeFitter调用在LayoutUtility工具类中的方法进行处理,对当前物体中实现了ILayoutElement接口的组件进行遍历,根据优先级大小,获取min、preferred、flexible 属性(水平和竖直两个方向)。根据ContentSizeFitter中的设置,处理当前物体设置为min、preferred、flexible 属性中的哪个属性。

 



实现ILayoutElement接口的组件 
Image Text Layout Group 类 
HorizontalLayoutGroup和VerticalLayoutGroup计算过程比较复杂,总之就是会遍历所有的子物体(只会遍历一层的深度)的大小,有一个选项为是否控制子物体大小,如果控制重新计算,不控制则用原有的大小,加在一起后,为总的min、preferred、flexible的大小。(之后有时间会写新的一篇文章)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值