From 7887b21a331c2903111f7c2483c57c8588604c09 Mon Sep 17 00:00:00 2001 From: Jakub Florkowski Date: Sat, 8 Feb 2025 14:30:58 +0100 Subject: [PATCH] Hidden ListView doesn't appear as expected - fix --- .../ListView/Android/ListViewRenderer.cs | 13 +++++++ .../Handlers/ListView/iOS/ListViewRenderer.cs | 13 +++++++ .../TestCases.HostApp/Issues/Issue27630.cs | 36 +++++++++++++++++++ .../Tests/Issues/Issue27630.cs | 26 ++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue27630.cs create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue27630.cs diff --git a/src/Controls/src/Core/Compatibility/Handlers/ListView/Android/ListViewRenderer.cs b/src/Controls/src/Core/Compatibility/Handlers/ListView/Android/ListViewRenderer.cs index 483af87bf8d7..09bbb047fe31 100644 --- a/src/Controls/src/Core/Compatibility/Handlers/ListView/Android/ListViewRenderer.cs +++ b/src/Controls/src/Core/Compatibility/Handlers/ListView/Android/ListViewRenderer.cs @@ -239,6 +239,8 @@ protected override void OnElementPropertyChanged(object sender, PropertyChangedE UpdateHorizontalScrollBarVisibility(); else if (e.PropertyName == ScrollView.VerticalScrollBarVisibilityProperty.PropertyName) UpdateVerticalScrollBarVisibility(); + else if (e.PropertyName == ListView.IsVisibleProperty.PropertyName) + UpdateVisibility(); } /* @@ -541,6 +543,17 @@ void UpdateHorizontalScrollBarVisibility() Control.HorizontalScrollBarEnabled = newHorizontalScrollVisiblility == ScrollBarVisibility.Always; } + private void UpdateVisibility() + { + if (Element.IsVisible) + { + if (Element.Parent is View parent) + { + parent.InvalidateMeasure(); + } + } + } + void UpdateVerticalScrollBarVisibility() { if (_defaultVerticalScrollVisibility == 0) diff --git a/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs b/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs index 4540c31278a0..f258a502fe10 100644 --- a/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs +++ b/src/Controls/src/Core/Compatibility/Handlers/ListView/iOS/ListViewRenderer.cs @@ -310,6 +310,8 @@ protected override void OnElementPropertyChanged(object sender, PropertyChangedE UpdateVerticalScrollBarVisibility(); else if (e.PropertyName == ScrollView.HorizontalScrollBarVisibilityProperty.PropertyName) UpdateHorizontalScrollBarVisibility(); + else if (e.PropertyName == ListView.IsVisibleProperty.PropertyName) + UpdateVisibility(); } public override void TraitCollectionDidChange(UITraitCollection previousTraitCollection) @@ -494,6 +496,17 @@ void UpdateFooter() } } + private void UpdateVisibility() + { + if (Element.IsVisible) + { + if (Element.Parent is View parent) + { + parent.InvalidateMeasure(); + } + } + } + void UpdateHeader() { var header = ListView.HeaderElement; diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue27630.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue27630.cs new file mode 100644 index 000000000000..c22618a40a52 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue27630.cs @@ -0,0 +1,36 @@ +namespace Maui.Controls.Sample.Issues +{ + [Issue(IssueTracker.Github, 27630, "Hidden ListView doesn't appear as expected", PlatformAffected.iOS | PlatformAffected.Android)] + public class Issue27630 : TestContentPage + { + protected override void Init() + { + var listView = new ListView + { + HeightRequest = 100, + IsVisible = false, + ItemTemplate = new DataTemplate(() => new ViewCell() + { + View = new Label() + { + Text = "Hello", + AutomationId = "ViewCellLabel" + } + }), + ItemsSource = new string[] { "Item 1", "Item 2", "Item 3" } + }; + + var button = new Button + { + Text = "Show/Hide ListView", + AutomationId = "Button", + Command = new Command(() => listView.IsVisible = !listView.IsVisible) + }; + + Content = new VerticalStackLayout() + { + Children = { button, listView } + }; + } + } +} diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue27630.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue27630.cs new file mode 100644 index 000000000000..63a1482b0ffa --- /dev/null +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue27630.cs @@ -0,0 +1,26 @@ +#if ANDROID || IOS +using NUnit.Framework; +using UITest.Appium; +using UITest.Core; + +namespace Microsoft.Maui.TestCases.Tests.Issues +{ + public class Issue27630 : _IssuesUITest + { + public Issue27630(TestDevice testDevice) : base(testDevice) + { + } + + public override string Issue => "Hidden ListView doesn't appear as expected"; + + [Test] + [Category(UITestCategories.ListView)] + public void ListViewShouldBeVisible() + { + App.WaitForElement("Button"); + App.Click("Button"); + App.WaitForElement("ViewCellLabel"); + } + } +} +#endif \ No newline at end of file