UGUI源码解析——ContentSizeFitter
Posted Hello Bug.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UGUI源码解析——ContentSizeFitter相关的知识,希望对你有一定的参考价值。
一:前言
ContentSizeFitter继承自ILayoutSelfController,是调整对象自适应的组件,ContentSizeFitter不改变子物体的大小和位置,而是根据子物体(ILayoutElement)来改变自身的尺寸
ContentSizeFitter所挂载的对象上必须挂载了实现ILayoutElement接口的组件
二:源码解析
——HandleSelfFittingAlongAxis
设置对象的位置和大小
与HorizontalLayoutGroup、VerticalLayoutGroup、GridLayoutGroup不同在于它没有继承ILayoutElement接口,所以没有计算对象属性(CalculateLayoutInputHorizontal和CalculateLayoutInputVertical)的过程,而对象属性直接通过LayoutUtility.GetMinSize与LayoutUtility.GetPreferredSize获取,获取时会从对象自身查找ILayoutElement,获取到minWidth与preferredWidth,如果不存在则返回默认值0
——SetLayoutHorizontal、SetLayoutVertical
——SetLayoutHorizontal、SetLayoutVertical:实现了设置自身的位置和大小,调用了HandleSelfFittingAlongAxis方法
三:ContentSizeFitter的坑
给对象身上挂载ContentSizeFitter组件后设置PreferredSize后立即获取rectTransform.sizeDelte或rectTransform.rect.size还是之前的值,下一帧后获取才是真实的size,可以使用以下方法执行一次更新方法再去获取rect
//第一种
GetComponent<ContentSizeFitter>().SetLayoutHorizontal();
//第二种
LayoutRebuilder.ForceRebuildLayoutImmediate(txt.rectTransform);
以上是关于UGUI源码解析——ContentSizeFitter的主要内容,如果未能解决你的问题,请参考以下文章