public override void SetLayoutVertical()
        {
            HandleSelfFittingAndChildrenSizeAlongAxis(1);
            if (m_ProcessLayoutVertical)
            {
                return;
            }

            //对于高度限制的Item的设计,不要立刻派发布局完成,可能导致改变了宽度,需要重新计算
            //一般不要设置这个属性,会导致两遍计算
            if (m_NeedRecalculate)
            {
                m_ProcessLayoutVertical = true;
                LayoutRebuilderUtility.ForceRebuildLayoutImmediate(rectTransform);
            }

            if (m_LayoutGroupComplete != null)
            {
                m_ProcessLayoutVertical = false;
                m_LayoutGroupComplete.Invoke();
            }
        }
Example #2
0
        protected bool SetChildrenAlongAxis(bool isVertical)
        {
            for (int axis = 0; axis < 2; ++axis)
            {
                float size           = rectTransform.rect.size[axis];
                float startOffset    = -m_TopStartPosition;
                bool  alongOtherAxis = (isVertical ^ (axis == 1));
                if (alongOtherAxis)
                {
                    float innerSize = size;
                    startOffset = 0;
                    for (int i = 0; i < itemViewChildren.Count; i++)
                    {
                        var child    = itemViewChildren[i].ItemRectTransform;
                        var itemSize = LayoutUtility.GetPreferredSize(child, axis);
                        SetChildItemAlongAxis(child, axis, startOffset, innerSize);

                        if (!Mathf.Approximately(itemSize, innerSize))
                        {
                            LayoutRebuilderUtility.ForceRebuildLayoutImmediate(child);
                            return(true);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < itemViewChildren.Count; i++)
                    {
                        var child    = itemViewChildren[i].ItemRectTransform;
                        var itemSize = LayoutUtility.GetPreferredSize(child, axis);
                        SetChildItemAlongAxis(child, axis, startOffset, itemSize);
                        startOffset += itemSize + m_Divider;
                    }
                }
            }
            return(false);
        }