要使 EditorWindow 的最后一个 EditorGUILayout 填充剩余的 space?
To make last EditorGUILayout of EditorWindow fill the remaining space?
默认情况下,所有 EditorGUILayout.BeginHorizontal()
和 EditorGUILayout.BeginVertical()
组填充所有可用的父级宽度(或 EditorWindow 宽度)。甚至只是垂直组。但同时 height
始终为 0(如果其中没有元素,否则宽度将等于内部元素的总高度)。
我应该怎么做才能强制填充元素组的所有可用高度或剩余高度?
我应该怎么做才能使space填充均匀?
我现在有什么:
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
使用
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 中)并在每次编辑器重绘时重复使用它以获得一些性能
默认情况下,所有 EditorGUILayout.BeginHorizontal()
和 EditorGUILayout.BeginVertical()
组填充所有可用的父级宽度(或 EditorWindow 宽度)。甚至只是垂直组。但同时 height
始终为 0(如果其中没有元素,否则宽度将等于内部元素的总高度)。
我应该怎么做才能强制填充元素组的所有可用高度或剩余高度?
我应该怎么做才能使space填充均匀?
我现在有什么:
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
使用
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 中)并在每次编辑器重绘时重复使用它以获得一些性能