public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        CustomDisplayAttribute customDisplay = attribute as CustomDisplayAttribute;

        property.isExpanded = true;

        SerializedProperty endProperty = property.GetEndProperty();

        switch (customDisplay.displayMode)
        {
        case CustomDisplayMode.NoLabel:
            break;

        case CustomDisplayMode.LabelAsHeader:
            position = PropertyDrawerUtil.DrawLabel(label, position, EditorStyles.boldLabel);
            break;

        case CustomDisplayMode.NoDropdown:
            position = PropertyDrawerUtil.DrawLabel(label, position);
            break;
        }

        property.NextVisible(true);

        do
        {
            position = PropertyDrawerUtil.DrawProperty(property, position, true);

            property.NextVisible(false);
        } while (!SerializedProperty.EqualContents(property, endProperty));
    }
    public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
    {
        property.isExpanded = true;

        float bodyHeight = (EditorGUI.GetPropertyHeight(property, label, true) - EditorGUI.GetPropertyHeight(property, label, false) - EditorGUIUtility.standardVerticalSpacing);

        CustomDisplayAttribute customDisplay = attribute as CustomDisplayAttribute;

        switch (customDisplay.displayMode)
        {
        case CustomDisplayMode.NoLabel:
            return(bodyHeight);

        case CustomDisplayMode.LabelAsHeader:
            return(bodyHeight + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing);

        case CustomDisplayMode.NoDropdown:
            return(EditorGUI.GetPropertyHeight(property, label, true));
        }

        return(0f);
    }