private static void SharkUI(CalcSize calcSize, ApplyValue applyValue, RectTransform.Axis axis)
        {
            var list = Utils.GetRectTransforms();

            if (list.Count < 2)
            {
                return;
            }

            float size = 10000000f;

            Vector3[] corners = new Vector3[4];
            for (var i = 0; i < list.Count; i++)
            {
                list[i].GetWorldCorners(corners);
                float _minV, _maxV;
                size = Mathf.Min(size, calcSize(corners, out _minV, out _maxV));
            }
            foreach (var rt in list)
            {
                var v = applyValue(rt, size);
                Undo.RecordObject(rt, "Expand or Shark UI");
                rt.SetSizeWithCurrentAnchors(axis, v.x);
            }
        }
        private static void DistributionGapUI(CalcSize calcSize, ApplyValue applyValue)
        {
            var list = Utils.GetRectTransforms();

            if (list.Count < 3)
            {
                return;
            }

            var vlist = new List <Value>(list.Count);

            float minV = 0f, maxV = 0f;
            float sumSize = 0f;

            Vector3[] corners = new Vector3[4];
            for (var i = 0; i < list.Count; i++)
            {
                list[i].GetWorldCorners(corners);
                float _minV, _maxV;
                float size = calcSize(corners, out _minV, out _maxV);
                minV     = 0 == i ? _minV : Mathf.Min(_minV, minV);
                maxV     = 0 == i ? _maxV : Mathf.Max(_maxV, maxV);
                sumSize += size;
                vlist.Add(new Value
                {
                    rt   = list[i],
                    v    = (_minV + _maxV) / 2,
                    size = size,
                });
            }
            ;
            vlist.Sort((a, b) =>
            {
                if (a.v < b.v)
                {
                    return(-1);
                }
                else if (a.v > b.v)
                {
                    return(1);
                }
                return(0);
            });

            float gap  = (maxV - minV - sumSize) / (list.Count - 1);
            float curV = minV + vlist[0].size + gap;

            for (var i = 1; i < vlist.Count - 1; i++)
            {
                var rt  = vlist[i].rt;
                var pos = applyValue(rt, curV + vlist[i].size / 2);
                curV += vlist[i].size + gap;
                Undo.RecordObject(rt, "Distribution UI By Gap");
                rt.anchoredPosition3D = pos;
            }
        }