要使EditorWindow的最后一个EditorGUILayout填充剩余的空间?

时间:2019-02-05 10:17:17

标签: c# unity3d unity3d-editor unity-editor

默认情况下,所有EditorGUILayout.BeginHorizontal()EditorGUILayout.BeginVertical()组都填充所有可用的父级宽度(或EditorWindow宽度)。甚至只是垂直群体。但是同时height始终为0(如果其中没有元素,则宽度将等于内部元素的总高度)。

我该如何强制填充元素组的所有可用高度或剩余高度?

我该怎么做才能使填充空间均匀?


我现在拥有什么:

EditorGUILayout.BeginHorizontal(); {
//          EditorGUILayout.TextField("Label", "Text");
} EditorGUILayout.EndHorizontal();
 containerRect = GUILayoutUtility.GetLastRect();

var containerRectVertical = Rect.zero;
EditorGUILayout.BeginHorizontal(); {
    EditorGUILayout.BeginVertical(); {

    } EditorGUILayout.EndVertical();

    containerRectVertical = GUILayoutUtility.GetLastRect();         
} EditorGUILayout.EndHorizontal();  
var containerRect2 = GUILayoutUtility.GetLastRect();

Debug.Log($"winSize: {position.width}x{position.height}, horizSectonSize: {containerRect.width}x{containerRect.height}, 2: {containerRect2.width}x{containerRect2.height}" +
              $", containerRectVertical: {containerRectVertical.width}x{containerRectVertical.height}");

输出:

winSize: 446x192, horizSectonSize: 447x0, 2: 447x0, containerRectVertical: 447x0

想要:

winSize: 446x192, horizSectonSize: 447x96, 2: 447x96, containerRectVertical: 447x96

winSize: 446x192, horizSectonSize: 447x192, 2: 447x0, containerRectVertical: 447x192

1 个答案:

答案 0 :(得分:2)

使用

GUILayout.FlexibleSpace();

例如具有以下代码的水平布局

GUILayout.BeginHorizontal();
GUILayout.Label("left");
GUILayout.FlexibleSpace();
GUILayout.Label("right");
GUILayout.EndHorizontal();

您得到了:

enter image description here

同样的东西适用于垂直群体。

另请参阅此处的更多详细选项: https://docs.unity3d.com/ScriptReference/GUILayoutOption.html

可用的提示是:

GUILayout.Width,GUILayout.Height,GUILayout.MinWidth,GUILayout.MaxWidth,GUILayout.MinHeight,GUILayout.MaxHeight,GUILayout.ExpandWidth,GUILayout.ExpandHeight。

您可以一次创建一个GUILayoutOption []选项(在OnEnable中),并在每次编辑器重绘时重新使用它以获得一些性能