From b84fdc2bc7f4c3a2ccea3f717279eb2115589d70 Mon Sep 17 00:00:00 2001 From: Alberto Aldegheri Date: Thu, 5 Jun 2025 13:08:17 +0200 Subject: [PATCH 1/3] Fix CV1 empty view not resizing when bounds change and grid layout not left aligning single item --- .../Handlers/Items/iOS/ItemsViewController.cs | 32 ++-- .../Items2/iOS/ItemsViewController2.cs | 11 +- .../TestCases.HostApp/Issues/Issue29595.cs | 160 ++++++++++++++++++ .../TestCases.HostApp/Issues/Issue29634.cs | 40 +++++ .../Tests/Issues/Issue29595.cs | 23 +++ .../Tests/Issues/Issue29634.cs | 23 +++ ...VerifyEmptyViewResizesWhenBoundsChange.png | Bin 0 -> 20342 bytes ...ifyGridItemsLayoutLeftAlignsSingleItem.png | Bin 0 -> 79262 bytes 8 files changed, 273 insertions(+), 16 deletions(-) create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue29595.cs create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29595.cs create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs create mode 100644 src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewResizesWhenBoundsChange.png create mode 100644 src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyGridItemsLayoutLeftAlignsSingleItem.png diff --git a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs index e4c8a6ab8752..7dcd343fe576 100644 --- a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs +++ b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cs @@ -209,8 +209,12 @@ public override void ViewWillLayoutSubviews() } base.ViewWillLayoutSubviews(); - - if (needsCellLayout || !_laidOut) + + if (needsCellLayout || // A cell changed its measure + !_laidOut || // We have never laid out + // With no cells, nothing will trigger a layout when bounds change, + // but we still need to properly lay out supplementary views + ItemsSource.ItemCount == 0) { // We don't want to mess up with ContentOffset while refreshing, given that's also gonna cause // a change in the content's offset Y. @@ -239,24 +243,32 @@ private protected virtual void LayoutSupplementaryViews() void InvalidateLayoutIfItemsMeasureChanged() { var visibleCells = CollectionView.VisibleCells; - List invalidatedPaths = null; + List invalidatedCells = null; var visibleCellsLength = visibleCells.Length; for (int n = 0; n < visibleCellsLength; n++) { if (visibleCells[n] is TemplatedCell { MeasureInvalidated: true } cell) { - invalidatedPaths ??= new List(visibleCellsLength); - var path = CollectionView.IndexPathForCell(cell); - invalidatedPaths.Add(path); + invalidatedCells ??= []; + invalidatedCells.Add(cell); } } - if (invalidatedPaths != null) + if (invalidatedCells is not null) { - var layoutInvalidationContext = new UICollectionViewFlowLayoutInvalidationContext(); - layoutInvalidationContext.InvalidateItems(invalidatedPaths.ToArray()); - CollectionView.CollectionViewLayout.InvalidateLayout(layoutInvalidationContext); + // GridLayout has a special positioning override when there's only one item + // so we have to invalidate the layout entirely to trigger that special case. + if (ItemsSource.ItemCount == 1) + { + CollectionView.CollectionViewLayout.InvalidateLayout(); + } + else + { + var layoutInvalidationContext = new UICollectionViewFlowLayoutInvalidationContext(); + layoutInvalidationContext.InvalidateItems(invalidatedCells.Select(CollectionView.IndexPathForCell).ToArray()); + CollectionView.CollectionViewLayout.InvalidateLayout(layoutInvalidationContext); + } } } diff --git a/src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewController2.cs b/src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewController2.cs index 23b8511d789e..ce3c77c05c6c 100644 --- a/src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewController2.cs +++ b/src/Controls/src/Core/Handlers/Items2/iOS/ItemsViewController2.cs @@ -207,23 +207,22 @@ void InvalidateLayoutIfItemsMeasureChanged() { var collectionView = CollectionView; var visibleCells = collectionView.VisibleCells; - List invalidatedPaths = null; + List invalidatedCells = null; var visibleCellsLength = visibleCells.Length; for (int n = 0; n < visibleCellsLength; n++) { if (visibleCells[n] is TemplatedCell2 { MeasureInvalidated: true } cell) { - invalidatedPaths ??= new List(visibleCellsLength); - var path = collectionView.IndexPathForCell(cell); - invalidatedPaths.Add(path); + invalidatedCells ??= []; + invalidatedCells.Add(cell); } } - if (invalidatedPaths != null) + if (invalidatedCells is not null) { var layoutInvalidationContext = new UICollectionViewLayoutInvalidationContext(); - layoutInvalidationContext.InvalidateItems(invalidatedPaths.ToArray()); + layoutInvalidationContext.InvalidateItems(invalidatedCells.Select(CollectionView.IndexPathForCell).ToArray()); collectionView.CollectionViewLayout.InvalidateLayout(layoutInvalidationContext); } } diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue29595.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue29595.cs new file mode 100644 index 000000000000..a410a9a78e72 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue29595.cs @@ -0,0 +1,160 @@ +using System.Collections.ObjectModel; +using Microsoft.Maui.Controls.Shapes; + +namespace Maui.Controls.Sample.Issues; + +[Issue(IssueTracker.Github, 29595, "iOS CV: GridItemsLayout not left-aligning a single item", PlatformAffected.iOS)] +public class Issue29595 : ContentPage +{ + readonly ObservableCollection _items = []; + + public Issue29595() + { + var grid = new Grid(); + + var cv = new CollectionView + { + Margin = 10, + VerticalOptions = LayoutOptions.Fill, + ItemsLayout = new GridItemsLayout(3, ItemsLayoutOrientation.Vertical) + { + HorizontalItemSpacing = 8, + VerticalItemSpacing = 8 + }, + ItemTemplate = GetItemTemplate(), + ItemsSource = _items + }; + + grid.Add(cv); + + Content = grid; + } + + static DataTemplate GetItemTemplate(double fontSize = 14) + { + return new DataTemplate(() => + { + var border = new Border + { + StrokeThickness = 0, + StrokeShape = new RoundRectangle { CornerRadius = 32 } + }; + + var innerGrid = new Grid + { + BackgroundColor = Colors.WhiteSmoke, + RowDefinitions = + { + new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }, + new RowDefinition { Height = GridLength.Auto } + } + }; + + var image = new FFImageLoadingStubImage + { + Aspect = Aspect.AspectFill, + Source = "dotnet_bot.png" + }; + Grid.SetRow(image, 0); + + var label = new Label + { + Text = "Test", + AutomationId = "StubLabel", + FontSize = fontSize, + FontFamily = "OpenSansRegular", + TextColor = Colors.Black, + HorizontalOptions = LayoutOptions.Center, + VerticalOptions = LayoutOptions.Center + }; + Grid.SetRow(label, 1); + + innerGrid.Add(image); + innerGrid.Add(label); + + border.Content = innerGrid; + return border; + }); + } + + protected override async void OnAppearing() + { + base.OnAppearing(); + await Task.Delay(300); + _items.Add("item1"); + } +} + +/// +/// This is a normal image which simulates FFImageLoading loading behavior which may trigger an additional measure pass +/// once the image is loaded, and the new measure could be different from the previous one. +/// +file class FFImageLoadingStubImage : Image +{ + int counter; + + protected async override void OnPropertyChanged(string propertyName = null) + { + base.OnPropertyChanged(propertyName); + + if (propertyName == SourceProperty.PropertyName) + { + ++counter; + await Task.Delay(100); + InvalidateMeasure(); + } + } + + protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint) + { + var desiredSize = base.OnMeasure(double.PositiveInfinity, double.PositiveInfinity); + var desiredWidth = double.IsNaN(desiredSize.Request.Width) ? 0 : desiredSize.Request.Width + counter; + var desiredHeight = double.IsNaN(desiredSize.Request.Height) ? 0 : desiredSize.Request.Height; + + if (double.IsNaN(widthConstraint)) + widthConstraint = 0; + if (double.IsNaN(heightConstraint)) + heightConstraint = 0; + + if (Math.Abs(desiredWidth) < double.Epsilon || Math.Abs(desiredHeight) < double.Epsilon) + return new SizeRequest(new Size(0, 0)); + + if (double.IsPositiveInfinity(widthConstraint) && double.IsPositiveInfinity(heightConstraint)) + { + return new SizeRequest(new Size(desiredWidth, desiredHeight)); + } + + if (double.IsPositiveInfinity(widthConstraint)) + { + var factor = heightConstraint / desiredHeight; + return new SizeRequest(new Size(desiredWidth * factor, desiredHeight * factor)); + } + + if (double.IsPositiveInfinity(heightConstraint)) + { + var factor = widthConstraint / desiredWidth; + return new SizeRequest(new Size(desiredWidth * factor, desiredHeight * factor)); + } + + var fitsWidthRatio = widthConstraint / desiredWidth; + var fitsHeightRatio = heightConstraint / desiredHeight; + + if (double.IsNaN(fitsWidthRatio)) + fitsWidthRatio = 0; + if (double.IsNaN(fitsHeightRatio)) + fitsHeightRatio = 0; + + if (Math.Abs(fitsWidthRatio) < double.Epsilon && Math.Abs(fitsHeightRatio) < double.Epsilon) + return new SizeRequest(new Size(0, 0)); + + if (Math.Abs(fitsWidthRatio) < double.Epsilon) + return new SizeRequest(new Size(desiredWidth * fitsHeightRatio, desiredHeight * fitsHeightRatio)); + + if (Math.Abs(fitsHeightRatio) < double.Epsilon) + return new SizeRequest(new Size(desiredWidth * fitsWidthRatio, desiredHeight * fitsWidthRatio)); + + var ratioFactor = Math.Min(fitsWidthRatio, fitsHeightRatio); + + return new SizeRequest(new Size(desiredWidth * ratioFactor, desiredHeight * ratioFactor)); + } +} diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs new file mode 100644 index 000000000000..337511656282 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs @@ -0,0 +1,40 @@ +namespace Maui.Controls.Sample.Issues; + +[Issue(IssueTracker.Github, 29634, "iOS CV: Empty view not resizing when bounds change", PlatformAffected.iOS)] +public class Issue29634 : ContentPage +{ + public Issue29634() + { + var cv = new CollectionView + { + ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal) { ItemSpacing = 10 }, + ItemTemplate = new DataTemplate(), + EmptyView = new Button + { + Margin=new Thickness(0,0,0,5), + BackgroundColor=Colors.LightSeaGreen, + FontSize = 12, + TextColor = Colors.DarkSlateGray, + Text="Button text" + } + }; + Grid.SetColumn(cv, 1); + + Content = new Grid + { + ColumnDefinitions = + [ + new ColumnDefinition(GridLength.Auto), + new ColumnDefinition(GridLength.Star) + ], + Children = { cv } + }; + } + + protected override async void OnAppearing() + { + base.OnAppearing(); + await Task.Delay(300); + ((Grid)Content).Add(new Label { Text = "StubLabel", AutomationId = "StubLabel" }); + } +} \ No newline at end of file diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29595.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29595.cs new file mode 100644 index 000000000000..b5a574fe2a88 --- /dev/null +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29595.cs @@ -0,0 +1,23 @@ +#if IOSUITEST +using NUnit.Framework; +using UITest.Appium; +using UITest.Core; + +namespace Microsoft.Maui.TestCases.Tests.Issues; +public class Issue29595 : _IssuesUITest +{ + public override string Issue => "iOS CV: GridItemsLayout not left-aligning a single item"; + + public Issue29595(TestDevice device) + : base(device) + { } + + [Test] + [Category(UITestCategories.CollectionView)] + public void VerifyGridItemsLayoutLeftAlignsSingleItem() + { + App.WaitForElement("StubLabel"); + VerifyScreenshot(); + } +} +#endif \ No newline at end of file diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs new file mode 100644 index 000000000000..0d728c9e8e56 --- /dev/null +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs @@ -0,0 +1,23 @@ +#if IOSUITEST +using NUnit.Framework; +using UITest.Appium; +using UITest.Core; + +namespace Microsoft.Maui.TestCases.Tests.Issues; +public class Issue29634 : _IssuesUITest +{ + public override string Issue => "iOS CV: Empty view not resizing when bounds change"; + + public Issue29634(TestDevice device) + : base(device) + { } + + [Test] + [Category(UITestCategories.CollectionView)] + public void VerifyEmptyViewResizesWhenBoundsChange() + { + App.WaitForElement("StubLabel"); + VerifyScreenshot(); + } +} +#endif \ No newline at end of file diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewResizesWhenBoundsChange.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewResizesWhenBoundsChange.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bbbd1b4bd4a989403820541296c6b1fe14801e GIT binary patch literal 20342 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 XBb|d*UJ^k25XgCJ`?D3lUcdWqce|+$ literal 0 HcmV?d00001 diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyGridItemsLayoutLeftAlignsSingleItem.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyGridItemsLayoutLeftAlignsSingleItem.png new file mode 100644 index 0000000000000000000000000000000000000000..89ca6907196527d40abe63dd744df8f57f3e4fbe GIT binary patch literal 79262 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 literal 0 HcmV?d00001 From c20d463225ee5b4ac63a302536e276a954bcfee2 Mon Sep 17 00:00:00 2001 From: Shane Neuville Date: Thu, 19 Jun 2025 15:03:15 -0500 Subject: [PATCH 2/3] - rework test --- .../TestCases.HostApp/Issues/Issue29634.cs | 44 +++++++++++------- .../Tests/Issues/Issue29634.cs | 8 ++-- ...VerifyEmptyViewResizesWhenBoundsChange.png | Bin 20342 -> 0 bytes 3 files changed, 31 insertions(+), 21 deletions(-) delete mode 100644 src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewResizesWhenBoundsChange.png diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs index 337511656282..6aaf71eb4d4d 100644 --- a/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs @@ -3,38 +3,46 @@ [Issue(IssueTracker.Github, 29634, "iOS CV: Empty view not resizing when bounds change", PlatformAffected.iOS)] public class Issue29634 : ContentPage { + CollectionView _collectionView; public Issue29634() { - var cv = new CollectionView + var button = new Button { - ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal) { ItemSpacing = 10 }, - ItemTemplate = new DataTemplate(), - EmptyView = new Button + Margin = new Thickness(0, 0, 0, 5), + BackgroundColor = Colors.LightSeaGreen, + FontSize = 12, + TextColor = Colors.DarkSlateGray, + Text = "Button text", + Command = new Command(() => Content.WidthRequest = 200), + AutomationId = "RunTest" + }; + + button.SizeChanged += (sender, e) => + { + if (sender is Button b && b.Width == 200) { - Margin=new Thickness(0,0,0,5), - BackgroundColor=Colors.LightSeaGreen, - FontSize = 12, - TextColor = Colors.DarkSlateGray, - Text="Button text" + ((Grid)Content).Add(new Label(){Text = "Button Successfully resized", AutomationId = "SuccessLabel"}); } }; - Grid.SetColumn(cv, 1); + + _collectionView = new CollectionView + { + ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal) { ItemSpacing = 10 }, + ItemTemplate = new DataTemplate(), + EmptyView = button + }; + + Grid.SetColumn(_collectionView, 1); Content = new Grid { + WidthRequest = 400, ColumnDefinitions = [ new ColumnDefinition(GridLength.Auto), new ColumnDefinition(GridLength.Star) ], - Children = { cv } + Children = { _collectionView } }; } - - protected override async void OnAppearing() - { - base.OnAppearing(); - await Task.Delay(300); - ((Grid)Content).Add(new Label { Text = "StubLabel", AutomationId = "StubLabel" }); - } } \ No newline at end of file diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs index 0d728c9e8e56..ddc13f4a8d80 100644 --- a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs @@ -1,9 +1,10 @@ -#if IOSUITEST +#if TEST_FAILS_ON_ANDROID using NUnit.Framework; using UITest.Appium; using UITest.Core; namespace Microsoft.Maui.TestCases.Tests.Issues; + public class Issue29634 : _IssuesUITest { public override string Issue => "iOS CV: Empty view not resizing when bounds change"; @@ -16,8 +17,9 @@ public Issue29634(TestDevice device) [Category(UITestCategories.CollectionView)] public void VerifyEmptyViewResizesWhenBoundsChange() { - App.WaitForElement("StubLabel"); - VerifyScreenshot(); + App.WaitForElement("RunTest"); + App.Tap("RunTest"); + App.WaitForElement("SuccessLabel"); } } #endif \ No newline at end of file diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewResizesWhenBoundsChange.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewResizesWhenBoundsChange.png deleted file mode 100644 index a1bbbd1b4bd4a989403820541296c6b1fe14801e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20342 zcmeHvc~q0vyKbzlv|6OCD3u84wJj)`-h@EDUi|tC(9)XowL5q@=<}PC9Rw2n3j`AP z2LvJpO>wgjNcb@bWd1q?V)_IEQMsMn%@(&;;=4}Mqw z$LWh-kN)-x^ru4xPbE>YIP=L5$JTH9{`zYSN!rwdC5N(O^Rf&0GYmE+po0~%4FY-9 zIkd>#13ERL^5ADMu+uuA@yi?EfMI`U3!3k^10=qF3%Y&!U^@8yi>fanknjHdzufhV zgkiZ&q+uhOvcYU9Lm=0C8>;`0&wE$xtrHy1Ox&xjjurHo@mlzOHX5E)H>^P;!;*~@ zi-#$(pKPh+S89k32ujYNW#k12*Llt>+9>KsN^4yPjOMW zjlFKyg69e|sDpzXE+6+a8EUNOQD0sy*;%kSipZ0^Q6XO%C2y{DGR0KlqQaxGR0jak z4$nUeF^i4tRt@QrvxCK6-1XLYMPqu{fF1Zjy@J3_LzyP5$Ic>=vgl9OvddV07PCB1 zBYe;ia~!}KN4hbAjAU-k827+ro5(aLoWZS+CKAB_s*#nBRBYgpH|%3RDB;#xNfypv zch9A2ZClvpq!Mi9VX6zfzP9#S@VmX5Ibr<|G;<^0es5#W|7hS~x&CR7gZVN}wu&Q> zNY;*FXf%aw!E2O=X!6V8mFQHe5qfdFL$pi3rILsM*gr?b@fKm6%^vwqT_p?#(_GI=`@h<{EE@ zKsc@S>Wq8H4#_H-X!b3y( zvwa0bzO6BGtTu?=)FFDUpfTRtTWRo!!{Nk;=Ze|gIkd4c)7Z^5pOjNGgU$~4vNB8> zY{99t_V>Pg&AgZp>E^nwuC7meiiL2{IrY@c6S~>hvy1aj5xG|?ufNW>PBJw!YfsgH zdB6FCwDJKA(eig&9dNnQ>b}v@(Z0UE@$nW(USMEg%*qE%A_KS1%3$JTlI;;*IEio= zj>8IBbTkvoh+@0KbA#LV+h*wLCQjw>V%S~A%$6LuSi-}}wri}N_T5-+*I-V*VddoH zz@;l0u+_#MOWTN=jIvi>g+sFwsfQ?({Oba4o$5yrw6H zTL*R+>ek?>Mk;ndAp8<) zXv9YP7Jv+3V0d(zrqS2ASkdT*N1C{K=RDQ#_F6mYT&k|G|=P03F^_afJtIko0+Z#K5c*P zXXl_9q*Vq@Hon6V5XyZOFB7a-AT>+16wmIlH}M{N>AFirue_o}x&W7nUzSyjO`7f} z#5h5X0vpz*k`Ue5SLg;2oRRa7elavO)V*3;qWT-3-IE8#4M>J|#JPwwiPHjnYlCd8 z7D!hql%k@dY6&PbyByPS(1GUQw>&Hl!=LHOGDb0yjT!Fr^;J;IeDNu6?SM$|mLXY0 z_dGQ~j8uBdBktkhp%J?_nJ3{Olwg~;0|FM@$SY~yt?{n$T~7_zD47Vg+IwpJcB|r$ zlc{LL2M3~1;YEs`d~;u3J7E0J0Wr}dr;`=bBd`0uTBXP&k)?>+nuZ`>{g2q?ny;sO z1oJWaT*81Xx63>^hmy{qUh1ppd&P)G z5f0fV%RK2K?^aK)r(VXYsB|%Nv<8u?YB*ofyeM94hcWv5o#@Q|{t#~6Fv$2EP~at; zbt;i81PRD_5W1EsTTAU|168^?aZkxBV$>G|s+8;jhvS4pZaB6Xb2NHWJ#)}vb=+C9 z*SXjpJ8?&WA*v_3?rPLZ940M>6B*G9X>MLuqSlvMm2i>;ICD?lw}7oS{5L3T90Y7b z6Stx%S=G7Luv7zpJW`x}B3dwOtJnC+AaDKSU;7QbwB4X&L7{$5taxr2Z_sTr4VWs% zx7p<=mKy+v3YZK!UGiEfb}1ej)G!$jjTIDVAOq4Uw)&*n=rWp5sztqxrcgePv{^ON zuvs7v%DjQHva*e_VX_e*nhskatgm?ZjCW3+o^(0K62O@Y&LyiJ3zCS1L}u(pF-$U7 z(_^{u?A~tiG)y|J#xSTygYYy)-~XveJYS}H@d;2UR=UT9!v2Ze(>^}a?Oq{3n}QIZ zfI7I3y4MGe=4K57&cB2`Kpk>}1NF2)EgS?yHheAA&KCnnEx5}Hq$Y1Dh_rB6WBq-9 zp)FTakJr)i-AGxb0- zUDqRGI@#DOik0?A(}5xG5h!THEY%L!Z!D+cT8N16v%~t&H=mpVR2wC9sCGGuhf`vg zr`{3XyqM|E@t`xP$uX|&2SP7~zkAbhxDo=HShbUgn3kJMtpqYai9l}BN(^71(u3R8 z0H6-?j;O$6s!m)VD6->Wm>a*?XE(I6Tge^u;aAEj^AeP`WBJuO|DK$SfDXnRLqUa~ z3Z415&Sw+Am4VzZ3=^0Q!P9#9?Bxr;)P=A*=0z{gKZ=OVo_BsOmK}sZHl-!Z_2(d# zO;d^56%A8~icq7Nl}CA-AjMtRttbTrK7gnxQXyegbj|CQoBo?}P@fLjZPmV=mdg(u z#zQ)Fkw_#4?Ig)UWa#bVKL77T*!-QXE2xzo z#M9F=%^NfIXd5IB%Upcx^bRg%!KD)lu#)lzZb#Dq%*_t(`T+_Nk(L07(x6l|vxwUc z*Vk8Aa*8V}Jn7r<7$)Px@=o}6ynV1o$$aS*pj$Va*jeBgW{fF~#hQje;|(3>uvke` z_(En@mI9g#Oh{gowThx%!^GYB2tZ@nu&l+!MXpk$be)Y}xm1JbVN5=eCf!hq*1-zP z;PgswE8mT=078xdq8s=Yemb$m_st*QNNh_Z*A4S5j7$A>gd)-6$6$F5jL*0?fx7I* zedxy7_f@lN z`mxJNv@0tZwi!R|;!Bz6aH{!ZY%pFHO~{K zYZLdhp=L2h7l0S5dc=+Zl8Tf;EdjVg?cb>Z#wN&#XjJo5?>|4=9)%X?M*D-xua6fB z1m^N&ee>dTr8xNLTe<*;=A~`a-hYan?MxRw?TINWD+@?~HQxO24-ZIJ8n>^&2GDHq ztGM}l(Lgt=ZoG@w?J8042E~31$QM$vnOjejQ+-bM$ke+enGh}uH`@+$g5aV*C&2Ak zxbElYR~i^73mK)zHYmK!v_iKNrJ$16#zTAXfwCUiW=|?0HSPff@YOQj&pQ|A@t^iQzEFs7*MXBaK{V-wjac9znuJu3X%8Yueb{Cz%%vU*g%TQPGSA3v zrdo(bI@$pH7y=bAnJI%y{KKtZgZ!1-Cf@>=qa+}o%|NTBgRgpc$d;63OKueL5Fu7r z2E_jN`N7hA(n-KOWK`!DN_iXO?3crLZ*^y{#~Zgy?#Www3#JW5LF4Xf0}O^dyFocE z<|paB^m_fHSw!GwlC0NC39r{^gb{J%N(p3o0c5E>QMp{$iW)D{rmk)gs3buCHXzg? z^l*hI1`wM4(-XencN?|vL3?`+sKPl8rv*$W2+fO4(&4(x+x0g70u!diW}YQ*zSDj3 zpy1XsaHG+(|6y2#Onzezwj!EdaAR$0(nbRt209l0`T>waf!x3X;qi=GUz<+N3+XsQ zGkqW0V}WL+xygk;EhFJT$ooSH2l~gxngEeXoh@aXd@xai2a!@l+m+03gDDkvzBp>~ zzRG2skDJ>t4ahtIuuQxNs0=W-yIw|K~78_5j}QM3*6DxkA7 zeK%#|?ygu+wJ5Ch4ZwE5WcJ+sYS)g({U5-j0652>GT>U}hN4-Bewyz$P$U`6lU$Km zK#hZ9fVRCX1oM^`pp<0e-I*cV2Zx3vfK^SvoK0I_ZsUL;gR4p%gGYTcK#d?Vvk$E7 z?Ce0jcnB}pJ1Q?w@tC#A1VmS+t8O7hxsVhD;re^+eb;(nll#2gK?<+poK05BUcH%Las zOh?2kYFNeqp@Xk?xTV0PYlp1jT~<*N%}78|ILR;$``L84Hhq8i+$JATJrIN4rnApH zGihLIh4}bnnJJSnB<)&&T3$=*5e6Qm9^GO<0Dw5Y^sdMq}HETp3Rvz1> zclxoxZmH`XnnQzw0y-}iEf&n-1U9(A-ri#q^oNISVmUq<9u2oAVUhvZ5pV}0Hg6~p zLBIdiu6=-v)OvvZn;$A0Cct6-gC$iy?dpJIQP>3!BIVLrJ*etiAj{u&}$z&CbE0hcjBE zqT_xHOzWmo%z_3>90{9GfcXctp9I`4n68M03&4jR3!Zu_?dcwK4QkyExsIzQx!?8t zZ(zPZlGoC&Z3J$kZ2bJ6av$aY&E1);vu+`Fg!<6?E7o zV>V818)1Sc=0xFksXe9ex+1Ma@m_7BVbRI*Lf*4JPl8z^O7Nb9B||ux;6b~Mdt>z? z@L$Z*HYTle7>9S$_E2t&bP=fn(O&DSIbF6WS#^D90=HAdI>PB>@8ICTQH1^2f^!iL zxg$6SI}{x0fuWDF7pUfNWovNTx>Id6EIahpYL$(W7)8KV;fshw@cb5mm!?F^;C4EX zWb`PG$Uqmp44R4$3}eUNu3eU_P@hvsgrc%$t&9ZoP50HlJ&C4CKW)>HU1I9pyhUDnB*OU>5Zg^H={4&eAhQdB7|;ZD54CSuiGUwe5w&yGL61 zIGoeKfV1+u8A6A$btfLZPygL-?WYi;1BS8e1k%OEaS*JwVwFLC6n0eSoO-WelvB@( zf=)$6kGz}QBxr&}kYVlkI4dD=v$ZoZB%6v@g5zpd_qw75=x8h3zp&|)!t~I~VBhR~as!%a0 zBZ9Q}qI)=RT$ZzVzWtU5-#e#$uRwLC}; zCw06ouODtkkH2Oevbz^PviM<-_Jbi4)EQRlN^U`lj1H(H&Of)W{MsUG%lmpwMU~H8<5$`9Z=lv1`Cl z+aW^>qvF|x1#@n=1XnRVZjd1PM9r*NY%&ah=4CQ1SPfF1QCE&zqtS?Qw2Q2FtS)r> zk3Ze`CT^JQ)abq3KQpJa&)P9ay?=S8Mqzm*rA91 z%A7H$8%(~J8h@D{zng2aAdpwBR^p*lbB398slPJ4!=nz#wM+e|2dWXzHIbF)*GH^& zD_*bsT<@yvZtZB|xQ&~$-cVQ=HE6yhz|)mRF4al|OlAs_+;6s*ge{^u)2NJ-8>Jl) zt1oT`rm)gRiQ+^a?2989T*X|IcM^)&j8z{ zl_fcq;=;d8%uMMnvO&1jH+!L-RzLZ`MG>B!?OEM`B?u@_*DD{erz?dAEXart)$xdo zL4m-iC$dC>M^$i8xyzSWGfmyb*;99FUXj65%1fD!#2~9s->A43)7b{inrbz~p5S)X zefqi`tb8r;xnvH&!lZ~jyG+-1Gqfauet>fZYNt2Zo5sF!+P9a!Csp;t^kgQ3A+NbA z{K=KLGr4d6@lDH`if&gkpYS-JHAD?+n#kTRWy=6|@W!U1f|}^gYu4>oiih#noSXfe zCDnTsd-Uc`MaQ((*v@C*0Rf>oPbwazFb8BiA!e-|xq#C%i(w`l1ku=HT@aTB5g7`T zGF*+Km0&l`Yy(&Sg5BV+?bX(1z8f1e8g4EtJ)%U5iNZ%rx1GuRHQX@)WIHP0V$^TW zb8(Z_j>@c%*6KS8?vJxn&AKgWs_B~(<&m^QugZGT8l8onn({5{S2Ri39`8og{413- zZ^8L{anCP?mWGs~g3vXGpwjYh`l7_p3#|!?;%~Nd)B(K(oa23;AXE>Yt!E(JYirlZ zPYvmGq4wq7qz$Q^N;U|g@sW%GQ)Ae7ejD)4BZ^2pV?%0KxQeyoK%b+shhot0BaFRI zEYQJ4*DB^X<$?0!a@HSo43yPVqsA8IGYIAMr5lBhqfoeFf>d#>hwjtGdk|w$d5)I`hCJ8bfMhmn`NK)=61NO{#%?wJ26 z%rWhAON+xMY1=|LF!8xm9Yu}H%~c@KO|Ai=*L#OLl0B$CAb)wbod$vXD}(v;09Mf% zOyJdEu>Q#rLzQ)yxYZGI)_N8C2t6^V;D?VNSo#rb;<&khdtXcd7$de#Y zH>wC`7+5Q@VX4eJQbE}Az zB|`kzSctPTYg}G&n6>B4*cXRVyDKo>Sdc7j@tKRcO)6Bys6cx*)P9s^@a4!yT+6oW zlxkKAA=cBSg1M=o08}}UuVB_J7i7Ij;fSr=05Qt&a9IxU~ye?=kn00QCuA1=iZr4FEEC`D)nR5;x+J? z*kaitPn-0Qx5XZ>t9v#Zsrj{CR)#v*it0Yh`-Tu7t136n?VZ|gJjR`XXiNgbpx}pE zHAJ4HDz$&T%{eJwtAq7?wY#KzwGzYLaqLg|l~NBW!LE81HnIO~eYs(4m8A{Gm(Ib6D-&0IRWOjv1em_BmR zr252tF$-_!@G;rPA6#9sDcVk6eI)+|A>Pqq_UU>1(XvFegJnI6^CVxZDHT?a`gjJ! zsR9@LzPw#7-8&w-e=$)N1Hh<`C=P%16BEq**r_Qfzic1$UHJnl5i$*IdS70ar;{P#D_ z-8EKR8?D%rN`P0r)JpRoM*SGU$6M@4(Mdi4l4>j*I-fxVN->*jUgf=9&DH6r8%JDZ z>8}BvPmrytkbIQ%ROdm@htNxBnoY|W6pII8#QYWfi1wB0aJTUc5gTgZR~)ntfn6qDoS|AI8ck~fR1Im(A=XPtQm~P@6DS?R=k*Q0&EI+ z1|w2;bW)g?yPSZwx4@qan~jqI_fb7JUYeFrLJeCz*$p3&(aGCw!n4=g;tM;8p`R+8 zi%y!?l+Hh~7$NLaPUf#zERDuA1@Y3Ja~c?;SKhqR`j4+9)fu=6X*yrL+q6>FJ)>~THDw(0 z*4x5Hv8A{cr{8bRQM0`at9H>}uzb|V zJ2cgi(2sxEu~z%)&P)T!mL#7$~~kKKx8bDWpJ z8qfzF{rz>60)QSca-7GkBD{AZ4YN!;t+H$tzQv`b^JpJ%U&YaXPXF;F_~25UeHxpiyp9Q!;Aa_5n8}oS`na_*Gd|o_et8ohu`N~0C$*@%&;M1rF|BEsM zg0`RtZcsCqKd-g*`GcU~Z(5MkpBLOZv(+eH3GDv^Ad_EQI`H5EqD~8>CgiNI`}tdT zc95gs{nwB$w*3GBt6M>~fiFmc9|ZJJ{tg0`gaiM+c=pA=TE4vbZ2Q07fAfcY<7C55 zDR}ug%-TKdrgxaHsZWS6c!8WacEV8in33)=Lzm;nOivn{8W?FGJ7#+9*xh%VKL5)B zNYqWgTT%b<0sJRtncx7ef4@SQAJR88%o}<8KR)I~vM)FUqAWkgH`4ExsWtfFaO+m6 zZy3bDMCV|iNUalWhyMHaOMa2Qf$nF)nS(<8P(hI6$4{KpIe5G_vgUu^?aKe$?Zim~ XBb|d*UJ^k25XgCJ`?D3lUcdWqce|+$ From d5f7dba8d91a81e8e53ff49dd32a8bf71a1b5749 Mon Sep 17 00:00:00 2001 From: Shane Neuville Date: Fri, 20 Jun 2025 11:22:56 -0500 Subject: [PATCH 3/3] - fix test --- .../TestCases.HostApp/Issues/Issue29634.cs | 31 ++++++++++++++----- .../Tests/Issues/Issue29634.cs | 2 +- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs index 6aaf71eb4d4d..81b29aeb14f4 100644 --- a/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue29634.cs @@ -6,6 +6,7 @@ public class Issue29634 : ContentPage CollectionView _collectionView; public Issue29634() { + Grid grid = null; var button = new Button { Margin = new Thickness(0, 0, 0, 5), @@ -13,15 +14,22 @@ public Issue29634() FontSize = 12, TextColor = Colors.DarkSlateGray, Text = "Button text", - Command = new Command(() => Content.WidthRequest = 200), + Command = new Command(() => grid.WidthRequest = 200), AutomationId = "RunTest" }; - button.SizeChanged += (sender, e) => + button.SizeChanged += async (sender, e) => { - if (sender is Button b && b.Width == 200) + await Task.Yield(); // Ensure the layout pass is complete before checking size + if (sender is Button b && Content is VerticalStackLayout l && grid.WidthRequest == 200) { - ((Grid)Content).Add(new Label(){Text = "Button Successfully resized", AutomationId = "SuccessLabel"}); + if (l.Children.Count > 1) + l.Children.RemoveAt(1); // Remove the previous label if it exists + + if (b.Width == 200) + l.Add(new Label() { Text = "Button Successfully resized", AutomationId = "SuccessLabel" }); + else + l.Add(new Label() { Text = $"Button Failed To Resize to 200: {b.Width}x{b.Height}", AutomationId = "FailLabel" }); } }; @@ -32,11 +40,10 @@ public Issue29634() EmptyView = button }; - Grid.SetColumn(_collectionView, 1); - - Content = new Grid + grid = new Grid { WidthRequest = 400, + HeightRequest = 200, ColumnDefinitions = [ new ColumnDefinition(GridLength.Auto), @@ -44,5 +51,15 @@ public Issue29634() ], Children = { _collectionView } }; + + Grid.SetColumn(_collectionView, 1); + + Content = new VerticalStackLayout + { + Children = + { + grid + } + }; } } \ No newline at end of file diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs index ddc13f4a8d80..6365c6bb3070 100644 --- a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29634.cs @@ -1,4 +1,4 @@ -#if TEST_FAILS_ON_ANDROID +#if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_WINDOWS using NUnit.Framework; using UITest.Appium; using UITest.Core;