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的主要内容,如果未能解决你的问题,请参考以下文章

UGUI源码解析——IMeshModifier

UGUI源码解析——ICanvasElement

UGUI源码解析——LayoutUtility

UGUI源码解析——Graphic

UGUI源码解析——VertexHelper

UGUI源码解析——LayoutGroup