需求简述
在实现功能需求时,经常碰到这样的功能要求:一个列表,每个列表项显示配置表中的文字,并且,列表项的高度需要根据文字多少进行自适应,列表的高度也要根据列表项的多少和高度进行自适应。
实现思路
列表
列表功能的实现没什么可说的,通过给 UI 挂载 VerticalLayoutGroup 组件即可,但此时我们会发现列表并不具有高度自适应的功能,因为 Layout 本身并不具有逻辑去根据子节点去适应自己的大小
ContentSizeFitter
此时引入 ContentSizeFitter 组件,该组件的作用是当 RebuildLayout 时,重新计算当前挂载的 GameObject 大小。用在文本上时,即可随文本的内容变化,效果如下:
问题
多层 Layout 自适应大小
即使引入了 ContentSizeFitter ,发现还是存在一个问题,当多层 Layout 关系中使用多个 ContentSizeFitter 时,Layout 的大小计算有问题,但多次 disable/enable 之后,计算又正确了:
查找原因
虽然通过多次 disable/enable 可以让计算正确,但实际应用中采取这样的方式来解决问题显然不现实,那么就需要查找一下原因是什么。
我们知道,