当前位置:   article > 正文

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

contentsizefitter
最近写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的大小。(之后有时间会写新的一篇文章)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/110426
推荐阅读
相关标签
  

闽ICP备14008679号