我有一个使用
CustomPropertyDrawer
在编辑器中显示的对象列表
目前我使用 ReorderableList
存储该列表,我已经覆盖了 drawElementCallback
和 onAddDropdownCallback
,相关代码如下所示:
reorderableList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
{
GUIContent elementLabel = new GUIContent();
elementLabel.text = "element " + index;
Rect elementRect = new Rect(rect.x, rect.y, rect.width, EditorGUI.GetPropertyHeight(list.GetArrayElementAtIndex(index)));
EditorGUI.indentLevel++;
EditorGUI.PropertyField(elementRect, list.GetArrayElementAtIndex(index), elementLabel, true);
EditorGUI.indentLevel--;
};
我的问题如下:列表的元素没有以正确的方式扩展,扩展时,它们占据了不应该的空间,就像这些例子一样。 第一个元素展开 最后一个元素展开 列表下方的深灰色空间确实会扩展,因此属性知道它应该占用更多空间......但不知何故,列表元素没有利用该空间。
我希望下一个元素向下移动,以便为展开的元素腾出空间,并使列表的浅灰色字段增长以适应。
潜在的重要注意事项:我的列表中的项目都有一个共同的类,它们继承自,但它们不一定是相同的类型,因此它们不会都具有相同的高度(就像我的两个图像中一样,元素是不同类型的)。
我认为我的错误是在提供的函数中的某个地方...我认为如果元素展开,在元素上调用
GetPropertyHeight()
会返回更大的高度,但看起来情况并非如此,我什至应该使用 ReorderableList
这里?
编辑:我尝试使用
EditorGUILayout.PropertyField()
而不是 EditorGUI.PropertyField()
来自动获取列表项高度,我得到了这个结果,它的行为更接近我的期望,尽管列表本身现在从浅灰色区域向下移动。 ..
使用 EditorGUILayout 时的检查器
reorderableList.elementHeightCallback
。
不,在
ReorderableList
回调实现中,您必须使用具有固定 EditorGUI
绘图的 Rect
类型,并且不能使用自动布局的 EditorGUILayout
类型。
这基本上与 PropertyDrawer
的行为方式相同