【问题标题】:To make last EditorGUILayout of EditorWindow fill the remaining space?让EditorWindow的最后一个EditorGUILayout填满剩余空间?
【发布时间】:2019-02-05 10:17:16
【问题描述】:

默认情况下,所有 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

【问题讨论】:

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


    【解决方案1】:

    使用

    GUILayout.FlexibleSpace();
    

    例如下面代码的水平布局

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

    你明白了:

    同样适用于垂直组。

    还可以在此处查看更详细的选项: 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 中)并在每次编辑器重绘时重新使用它以获得一些性能

    【讨论】:

    • GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true) -- 有帮助