前言:Layout是UI自动布局神器,但是大量使用,性能又是令人捉急的,还有一个毛病就是,要获取content真实size的时候,总是要延迟一帧才能拿到真实数据,让我们来研究一下layout的实现
在UGUI的使用中,编辑器或者运行时,对于一个LayoutGroup,当激活它、调整它的RectTransform、增删它的子节点时,都会触发它的子节点的自动布局重建动作。下面是相应代码。
标记更新布局
protected override void OnEnable()
{
base.OnEnable();
SetDirty();
}
protected override void OnRectTransformDimensionsChange()
{
base.OnRectTransformDimensionsChange();
//注意OnRectTransformDimensionsChange中有一个isRootLayoutGroup的属性判断。 //只有该LayoutGroup没有受控于父节点的ILayoutGroup时才会触发SetDirty。 if (isRootLayoutGroup)
SetDirty();
}
protected virtual void OnTransformChildrenChanged()
{
SetDirty();
}
首先看一下为啥要延迟一帧:在SetDirty方法里,如果没有注册到CanvasUpdateRegistry里,就注册有注册的话,就开个协程,在下一帧调用La