如何对齐 GUILayout 元素

How to align GUILayout elements

我正在努力改进转换检查器,但目前卡住了。

有没有办法将这些按钮右对齐?

这些只是包裹在水平组内的两个 GUILayout 按钮。

public override void OnInspectorGUI()
{
    EditorGUILayout.BeginHorizontal();
    GUILayout.Button("World", EditorStyles.miniButtonLeft, GUILayout.Width(85));
    GUILayout.Button("Local", EditorStyles.miniButtonRight, GUILayout.Width(85));
    EditorGUILayout.EndHorizontal();

    defaultEditor.OnInspectorGUI();
}

如何将它们放在右边?

您可以通过在按钮前面添加灵活的 space 将按钮移动到右侧:

public override void OnInspectorGUI()
{
    EditorGUILayout.BeginHorizontal();
    GUILayout.FlexibleSpace();
    GUILayout.Button("World", EditorStyles.miniButtonLeft, GUILayout.Width(85));
    GUILayout.Button("Local", EditorStyles.miniButtonRight, GUILayout.Width(85));
    EditorGUILayout.EndHorizontal();

    defaultEditor.OnInspectorGUI();
}

灵活的 space 简单地吃掉布局组中剩余的 space。如果您有多个灵活的 space,则 space 在它们之间平均分配。

您可能会在我的 IMGUI crash course 中找到更多详细信息。

作为 的替代方案,如果您希望将按钮与其他字段的左端对齐,您只需插入一个与前缀大小相同的 space标签:

public override void OnInspectorGUI()
{
    EditorGUILayout.BeginHorizontal();
    {
        GUILayout.Space(EditorGUIUtility.labelWidth);

        if(GUILayout.Button("World", EditorStyles.miniButtonLeft))
        {
            ...
        }

        if(GUILayout.Button("Local", EditorStyles.miniButtonRight))
        {
            ...
        }
    }
    EditorGUILayout.EndHorizontal();

    defaultEditor.OnInspectorGUI();
}