为了使EditorWindow的最后EditorGUILayout填补剩余的空间?

问题描述 投票:0回答:1

默认情况下,所有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个回答
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),并与每个编辑重绘重新使用它来获得一些性能提升

© www.soinside.com 2019 - 2024. All rights reserved.