Remove space between fields in BeginHorizontal

So I have an issue with EditorGUILayout.BeginHorizontal and fields within it.

No matter what I use the labelfields within a horizontal field will space themselves out across a horizontal area rather than snap right next to each other. You can resize the window and see the fields actively move to add/remove the space on their own to fill out the space equally.
I’ve tried using ExpandWidth and labelWidth but nothing changes with their usage.
128694-weirdspace.png

This is my code:

 private GUIStyle AreaStyleNoMargin {
            get {
                GUIStyle s = new GUIStyle(EditorStyles.textArea) {
                    margin = new RectOffset(0, 0, 0, 0),
                };
                return s;
            }
        }
        private GUIStyle AreaStyleNoPadding {
            get {
                GUIStyle s = new GUIStyle(EditorStyles.textArea) {
                    padding = new RectOffset(0, 0, 0, 0)
                };
                return s;
            }
        }
        private GUIStyle AreaStyleNoMarginNoPadding {
            get {
                GUIStyle s = new GUIStyle(EditorStyles.textArea) {
                    margin = new RectOffset(0, 0, 0, 0),
                    padding = new RectOffset(0, 0, 0, 0),

                };
                return s;
            }
        }

//....
        private void DrawDatabaseEntries() {
            CheckInit();

            EditorGUILayout.BeginVertical();
            {
                EditorGUILayout.BeginHorizontal();
                {
                    Rect DBList = EditorGUILayout.BeginVertical(AreaStyleNoPadding, GUILayout.MaxWidth(((position.width / 4) * 3) + 30), GUILayout.MaxHeight((position.height / 4) * 3), GUILayout.MinHeight((position.height / 4) * 3));
                    {
                        dbEntriesScroll = GUILayout.BeginScrollView(dbEntriesScroll);
                        {
                            GUILayout.Box("", EditorStyles.toolbar, GUILayout.ExpandWidth(true));
                            GUILayout.Space((EditorGUIUtility.singleLineHeight * -1f) - 2.5f);
                            //Sorter Tabs
                            GUILayout.BeginHorizontal();
                            {
                                if (GUILayout.Button("ID", TabStyleNoMargin)) {
                                    //DBSort = ManagerDBSort.LoadOrder;
                                    //SortEditorDB();
                                }
                                if (GUILayout.Button("Name", TabStyleNoMargin)) {
                                    //DBSort = ManagerDBSort.Name;
                                    //SortEditorDB();
                                }
                            }
                            GUILayout.EndHorizontal();

                            if (selectedDatabase != null) {
                                foreach (DatabaseEntry dbE in selectedDatabase.entries) {
                                    EditorGUILayout.BeginHorizontal(AreaStyleNoMarginNoPadding);
                                    EditorGUIUtility.labelWidth = 1;
                                    EditorGUILayout.LabelField(dbE.ID, AreaStyleNoMargin, GUILayout.MaxWidth(60), GUILayout.MinWidth(60), GUILayout.MinHeight(EditorGUIUtility.singleLineHeight + 2), GUILayout.ExpandWidth(false));
                                    EditorGUILayout.LabelField(dbE.Name, AreaStyleNoMargin, GUILayout.MaxWidth(60), GUILayout.MinWidth(60), GUILayout.MinHeight(EditorGUIUtility.singleLineHeight + 2), GUILayout.ExpandWidth(false));
                                    EditorGUIUtility.labelWidth = 0;
                                    EditorGUILayout.EndHorizontal();
                                }
                            }
                                
                            //Draw Lines
                            Handles.BeginGUI();
                            Handles.color = Color.gray;
                            for (int i = 0; i < 7; i++) {
                                Handles.DrawLine(new Vector2(DBList.position.x + (100 * (i + 1)) - 2, DBList.position.y - 20), new Vector2(DBList.position.x + (100 * (i + 1)) - 2, DBList.position.y + DBList.size.y));
                            }
                            
                            Handles.EndGUI();

                        }
                        GUILayout.EndScrollView();
                    }
                    EditorGUILayout.EndVertical();
                }
                EditorGUILayout.EndHorizontal();
            }
            EditorGUILayout.EndVertical();
        }

The layout system will distribute all left over space to all flexible spaces. If you want to collect all the left over space at one point, use GUILayout.FlexibleSpace(). So place this as the last element in your layout group. you may want to have a look at my IMGUI crash course. I have a mirror version on github since UnityAnswers has suddenly messed up the markup formatting.

ps: you shouldn’t use a LabelField. A LabelField is meant to provide a label for some other control or for a simple text field. Have a look at the source code. If you just want to display data, just use a GUILayout.Label.

Though keep in mind that Unity does not have a “table” layout. Each layout group is independent from other groups. To me it seems you try to build a table. Two or more seperate horizontal layout groups won’t align each other unless their content has the exact same size. It’s better to provide a fix column size for each element. Keep in mind that you can use “GUILayout.Width(yourWidth)” as a GUILayoutOption to pretty much any layouted control.

@NeonTheCoder
I found the answer to this question here:

https://forum.unity.com/threads/much-too-large-space-between-label-and-field-how-to-fix.312963/

Updating the answer after trying out @Bunny83 's comment and answer in Unity Editor:

For me this helped :

                    GUILayout.FlexibleSpace();
                    EditorGUILayout.EndHorizontal();

Putting the GUILayout.FlexibleSpace(); before EditorGUILayout.EndHorizontal(); is the right way. All the spacing is managed automagically.

164020-spacing.jpg

private GUIStyle AreaStyleNoMargin {
get {
GUIStyle s = new GUIStyle(EditorStyles. textArea) {
margin = new RectOffset(0, 0, 0, 0),
};
return s;
}
}