UGUI源码解析(二十二)ContentSizeFitter

ContentSizeFitter类

继承了UIBehaviour, ILayoutSelfController,继承ILayoutSelfController,需要重写SetLayoutHorizontal和SetLayoutVertical方法。

SetLayoutHorizontal方法

清空DrivenRectTransformTracker,调用HandleSelfFittingAlongAxis(0)

SetLayoutVertical方法

调用HandleSelfFittingAlongAxis(1)

HandleSelfFittingAlongAxis方法

  • 根据传入的axis轴,取得相应的匹配方式。0为水平,1为垂直。
  • 当匹配模式为默认的FitMode.Unconstrained时,只是把当前RectTransform添加到m_Tracker中,保持对RectTransform的追踪,但不控制它的属性。
  • 当匹配模式为MinSize或PreferredSize时,把当前RectTransform添加到m_Tracker中,保持对RectTransform的追踪,同时根据传入的axis轴,控制RectTransform的SizeDelta属性。
  • 然后,调用rectTransform.SetSizeWithCurrentAnchors,将RectTransform计算得到的Rect在指定轴上设置大小,也就是在指定轴上为RectTransform设置大小。(最小尺寸或首选尺寸)
  • 设置最小尺寸时,会调用LayoutUtility.GetMinSize方法,当axis为0时,返回最小宽度。否则返回最小高度。
  • 设置首选尺寸时,会调用LayoutUtility.GetPreferredSize方法,当axis为0时,返回首选的宽度。否则返回首选的高度。

 

LayoutUtility类

GetMinSize方法,当axis为0时,返回最小宽度GetMinWidth。否则返回最小高度GetMinHeight。在GetMinWidth或GetMinHeight方法中,会调用GetLayoutProperty,取得相应的属性值。

GetPreferredSize方法,当axis为0时,返回首选的宽度GetPreferredWidth。否则返回首选的高度GetPreferredHeight。例如,在GetPreferredWidth方法中,会调用GetLayoutProperty,取得minWidth的属性值和preferredWidth的属性值,然后取得两者之间最大的返回。

GetLayoutProperty方法,找到RectTransform上所有的ILayoutElement类型的组件,使用优先级最高的属性值,如果有个组件优先级一致,则取得最大的那个属性值。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值