Unity Editor中EditorGUILayout.ScrollViewScope搭配IndentLevelScope横向滚动失效问题
问题原因
EditorGUILayout.LabelField默认会自动适配当前父容器的可用宽度,自动对超出内容做折行处理,内容不会超出ScrollView的可视宽度范围,因此无法触发横向滚动。- 你使用的
LinkLabel系统样式默认开启了自动折行,进一步加剧了这个问题,而GUILayout.Label默认未开启强制折行,超宽内容会直接撑开滚动视口,因此可以触发横向滚动。
解决方案
你只需要修改LabelField的绘制参数,关闭自动折行、指定固定宽度即可保留缩进效果的同时触发横向滚动,修改后的代码如下:
using (var midScroll = new EditorGUILayout.ScrollViewScope(midSPos, true, true)) { using (new EditorGUI.IndentLevelScope(1)) { midSPos = midScroll.scrollPosition; // 提前获取样式并关闭自动折行 var linkStyle = GUI.skin.GetStyle("LinkLabel"); linkStyle.wordWrap = false; // 计算内容实际宽度,也可以直接写固定值比如600 float labelWidth = linkStyle.CalcSize(new GUIContent("This is a EditorGUILayout.LabelField. This is a EditorGUILayout.LabelField.")).x; for (int i = 0; i < 50; i++) { // 手动指定Label宽度,阻止自动适配折行 EditorGUILayout.LabelField("This is a EditorGUILayout.LabelField. This is a EditorGUILayout.LabelField.", linkStyle, GUILayout.Width(labelWidth)); } } }
额外注意项
- 如果需要保留样式的全局折行特性,不要直接修改全局
LinkLabel样式,可以新建一个样式副本修改,避免影响其他控件的显示。 - 缩进会占用左侧宽度,计算内容总宽度时不需要额外加缩进值,
EditorGUI.IndentLevelScope会自动给LabelField添加左侧偏移。
内容的提问来源于stack exchange,提问作者SoMuch SMx
相关产品推荐
相关产品推荐

