[Opt] 统一ScrollBar显示
This commit is contained in:
parent
0482f505a6
commit
255892dd5f
@ -56,8 +56,7 @@ namespace AlicizaX.UI.Editor
|
|||||||
#region Serialized Properties - Templates & Scrollbar
|
#region Serialized Properties - Templates & Scrollbar
|
||||||
|
|
||||||
private SerializedProperty _templates;
|
private SerializedProperty _templates;
|
||||||
private SerializedProperty _showScrollBar;
|
private SerializedProperty _scrollbarVisibility;
|
||||||
private SerializedProperty _showScrollBarOnlyWhenScrollable;
|
|
||||||
private SerializedProperty _scrollbar;
|
private SerializedProperty _scrollbar;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -110,8 +109,7 @@ namespace AlicizaX.UI.Editor
|
|||||||
private void InitializeTemplateProperties()
|
private void InitializeTemplateProperties()
|
||||||
{
|
{
|
||||||
_templates = serializedObject.FindProperty("templates");
|
_templates = serializedObject.FindProperty("templates");
|
||||||
_showScrollBar = serializedObject.FindProperty("showScrollBar");
|
_scrollbarVisibility = serializedObject.FindProperty("scrollbarVisibility");
|
||||||
_showScrollBarOnlyWhenScrollable = serializedObject.FindProperty("showScrollBarOnlyWhenScrollable");
|
|
||||||
_scrollbar = serializedObject.FindProperty("scrollbar");
|
_scrollbar = serializedObject.FindProperty("scrollbar");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,19 +352,13 @@ namespace AlicizaX.UI.Editor
|
|||||||
{
|
{
|
||||||
using (new EditorGUI.DisabledScope(isPlaying))
|
using (new EditorGUI.DisabledScope(isPlaying))
|
||||||
{
|
{
|
||||||
bool previousShowScrollBarValue = _showScrollBar.boolValue;
|
ScrollbarVisibility previousVisibility = (ScrollbarVisibility)_scrollbarVisibility.enumValueIndex;
|
||||||
EditorGUILayout.PropertyField(_showScrollBar);
|
EditorGUILayout.PropertyField(_scrollbarVisibility, new GUIContent("Scrollbar Visibility"));
|
||||||
|
ScrollbarVisibility currentVisibility = (ScrollbarVisibility)_scrollbarVisibility.enumValueIndex;
|
||||||
|
|
||||||
if (_showScrollBar.boolValue != previousShowScrollBarValue)
|
if (currentVisibility != previousVisibility)
|
||||||
{
|
{
|
||||||
HandleScrollBarToggle();
|
HandleScrollBarVisibilityChange(previousVisibility, currentVisibility);
|
||||||
}
|
|
||||||
|
|
||||||
if (_showScrollBar.boolValue)
|
|
||||||
{
|
|
||||||
EditorGUILayout.PropertyField(
|
|
||||||
_showScrollBarOnlyWhenScrollable,
|
|
||||||
new GUIContent("Only When Scrollable", "Hide the scrollbar and disable list scrolling when content does not overflow the viewport."));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -535,22 +527,24 @@ namespace AlicizaX.UI.Editor
|
|||||||
|
|
||||||
#region Scrollbar Handling
|
#region Scrollbar Handling
|
||||||
|
|
||||||
private void HandleScrollBarToggle()
|
private void HandleScrollBarVisibilityChange(ScrollbarVisibility previousVisibility, ScrollbarVisibility currentVisibility)
|
||||||
{
|
{
|
||||||
if (_showScrollBar.boolValue)
|
if (currentVisibility == ScrollbarVisibility.AlwaysHide)
|
||||||
{
|
|
||||||
CreateScrollBar();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
ClearScrollBar();
|
ClearScrollBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (previousVisibility == ScrollbarVisibility.AlwaysHide)
|
||||||
|
{
|
||||||
|
CreateScrollBar();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateScrollBar()
|
private void CreateScrollBar()
|
||||||
{
|
{
|
||||||
var recyclerView = target as RecyclerView;
|
var recyclerView = target as RecyclerView;
|
||||||
if (recyclerView == null) return;
|
if (recyclerView == null) return;
|
||||||
|
if (_scrollbar.objectReferenceValue != null) return;
|
||||||
|
|
||||||
Direction direction = (Direction)_direction.enumValueIndex;
|
Direction direction = (Direction)_direction.enumValueIndex;
|
||||||
string prefabPath = GetScrollbarPrefabPath(direction);
|
string prefabPath = GetScrollbarPrefabPath(direction);
|
||||||
@ -589,7 +583,7 @@ namespace AlicizaX.UI.Editor
|
|||||||
|
|
||||||
private void ClearScrollBar()
|
private void ClearScrollBar()
|
||||||
{
|
{
|
||||||
_showScrollBar.boolValue = false;
|
_scrollbarVisibility.enumValueIndex = (int)ScrollbarVisibility.AlwaysHide;
|
||||||
|
|
||||||
if (_scrollbar.objectReferenceValue != null)
|
if (_scrollbar.objectReferenceValue != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -229,4 +229,11 @@ namespace AlicizaX.UI
|
|||||||
Center,
|
Center,
|
||||||
Top
|
Top
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum ScrollbarVisibility
|
||||||
|
{
|
||||||
|
AlwaysHide = 0,
|
||||||
|
AlwaysShow = 1,
|
||||||
|
WhenScrollable = 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,12 +87,11 @@ namespace AlicizaX.UI
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否显示滚动条<E58AA8>?
|
/// 是否显示滚动条<E58AA8>?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HideInInspector] [SerializeField] private bool showScrollBar;
|
[HideInInspector] [SerializeField] private ScrollbarVisibility scrollbarVisibility;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否仅在内容可滚动时显示滚动条<E58AA8>?
|
/// 是否仅在内容可滚动时显示滚动条<E58AA8>?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HideInInspector] [SerializeField] private bool showScrollBarOnlyWhenScrollable;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 与当前列表关联的滚动条组件<E7BB84>?
|
/// 与当前列表关联的滚动条组件<E7BB84>?
|
||||||
@ -302,13 +301,13 @@ namespace AlicizaX.UI
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置是否仅在内容可滚动时显示滚动条<E58AA8>?
|
/// 获取或设置是否仅在内容可滚动时显示滚动条<E58AA8>?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool ShowScrollBarOnlyWhenScrollable
|
public ScrollbarVisibility ScrollbarVisibility
|
||||||
{
|
{
|
||||||
get => showScrollBarOnlyWhenScrollable;
|
get => scrollbarVisibility;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (showScrollBarOnlyWhenScrollable == value) return;
|
if (scrollbarVisibility == value) return;
|
||||||
showScrollBarOnlyWhenScrollable = value;
|
scrollbarVisibility = value;
|
||||||
RequestLayout();
|
RequestLayout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -688,7 +687,7 @@ namespace AlicizaX.UI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void ConfigureScrollbar()
|
private void ConfigureScrollbar()
|
||||||
{
|
{
|
||||||
if (!showScrollBar || scrollbar == null) return;
|
if (scrollbarVisibility == ScrollbarVisibility.AlwaysHide || scrollbar == null) return;
|
||||||
|
|
||||||
scrollbar.onValueChanged.AddListener(OnScrollbarChanged);
|
scrollbar.onValueChanged.AddListener(OnScrollbarChanged);
|
||||||
|
|
||||||
@ -1428,7 +1427,17 @@ namespace AlicizaX.UI
|
|||||||
/// <returns>应显示滚动条时返<E697B6>?<see langword="true"/>;否则返<E58899>?<see langword="false"/><3E>?/returns>
|
/// <returns>应显示滚动条时返<E697B6>?<see langword="true"/>;否则返<E58899>?<see langword="false"/><3E>?/returns>
|
||||||
private bool ShouldShowScrollbar()
|
private bool ShouldShowScrollbar()
|
||||||
{
|
{
|
||||||
if (!showScrollBar || !scroll || scrollbar == null || scroller == null || layoutManager == null || !SupportsOverflowCheck())
|
if (scrollbarVisibility == ScrollbarVisibility.AlwaysHide || !scroll || scrollbar == null || scroller == null || layoutManager == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scrollbarVisibility == ScrollbarVisibility.AlwaysShow)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!SupportsOverflowCheck())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1533,7 +1542,7 @@ namespace AlicizaX.UI
|
|||||||
/// <returns>需要仅在内容溢出时启用滚动返回 <see langword="true"/>;否则返<E58899>?<see langword="false"/><3E>?/returns>
|
/// <returns>需要仅在内容溢出时启用滚动返回 <see langword="true"/>;否则返<E58899>?<see langword="false"/><3E>?/returns>
|
||||||
private bool ShouldLimitScrollToOverflow()
|
private bool ShouldLimitScrollToOverflow()
|
||||||
{
|
{
|
||||||
return showScrollBar && showScrollBarOnlyWhenScrollable && SupportsOverflowCheck();
|
return scrollbarVisibility == ScrollbarVisibility.WhenScrollable && SupportsOverflowCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user