LayoutElement:继承了ILayoutElement和ILayoutIgnorer接口,作为布局元素组件
挂载了Layout Element组件的对象,布局并不会生效,它是受到实现了布局组的控制(HorizontalLayoutGroup、VerticalLayoutGroup、GridLayoutGroup)
源码解析
继承自ILayoutElement的属性
UGUI源码解析——ILayoutElement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| [SerializeField] private bool m_IgnoreLayout = false; public virtual bool ignoreLayout { get { return m_IgnoreLayout; } set { if (SetPropertyUtility.SetStruct(ref m_IgnoreLayout, value)) SetDirty(); } }
[SerializeField] private float m_MinWidth = -1; public virtual float minWidth { get { return m_MinWidth; } set { if (SetPropertyUtility.SetStruct(ref m_MinWidth, value)) SetDirty(); } }
[SerializeField] private float m_MinHeight = -1; public virtual float minHeight { get { return m_MinHeight; } set { if (SetPropertyUtility.SetStruct(ref m_MinHeight, value)) SetDirty(); } }
[SerializeField] private float m_PreferredWidth = -1; public virtual float preferredWidth { get { return m_PreferredWidth; } set { if (SetPropertyUtility.SetStruct(ref m_PreferredWidth, value)) SetDirty(); } }
[SerializeField] private float m_PreferredHeight = -1; public virtual float preferredHeight { get { return m_PreferredHeight; } set { if (SetPropertyUtility.SetStruct(ref m_PreferredHeight, value)) SetDirty(); } }
[SerializeField] private float m_FlexibleWidth = -1; public virtual float flexibleWidth { get { return m_FlexibleWidth; } set { if (SetPropertyUtility.SetStruct(ref m_FlexibleWidth, value)) SetDirty(); } }
[SerializeField] private float m_FlexibleHeight = -1; public virtual float flexibleHeight { get { return m_FlexibleHeight; } set { if (SetPropertyUtility.SetStruct(ref m_FlexibleHeight, value)) SetDirty(); } }
[SerializeField] private int m_LayoutPriority = 1; public virtual int layoutPriority { get { return m_LayoutPriority; } set { if (SetPropertyUtility.SetStruct(ref m_LayoutPriority, value)) SetDirty(); } }
|
SetDirty:将LayoutElement标记为dirty。这将使自动布局系统在下一次布局时处理该元素。只要有可能影响布局的更改,LayoutElement就应该调用这个方法。
1 2 3 4 5 6
| protected void SetDirty() { if (!IsActive()) return; LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform); }
|