From b9b8d5f18d5108e09e996c6a09444b71bb91e4a2 Mon Sep 17 00:00:00 2001 From: Vladislav Antonyuk Date: Sun, 26 Nov 2023 15:48:20 +0200 Subject: [PATCH] [BUG] [Windows] UniformItemsLayout item positioning not correct #1553 --- .../Layouts/UniformItemsLayoutManager.shared.cs | 9 +++++++-- .../Layouts/UniformItemsLayoutTests.cs | 6 +++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/CommunityToolkit.Maui.Core/Layouts/UniformItemsLayoutManager.shared.cs b/src/CommunityToolkit.Maui.Core/Layouts/UniformItemsLayoutManager.shared.cs index dd26019d23..dafdb5caa2 100644 --- a/src/CommunityToolkit.Maui.Core/Layouts/UniformItemsLayoutManager.shared.cs +++ b/src/CommunityToolkit.Maui.Core/Layouts/UniformItemsLayoutManager.shared.cs @@ -30,10 +30,15 @@ public override Size ArrangeChildren(Rect rectangle) var width = rectangle.Width - uniformItemsLayout.Padding.HorizontalThickness; var visibleChildren = uniformItemsLayout.Where(x => x.Visibility == Visibility.Visible).ToArray(); + if (visibleChildren.Length == 0 || width == 0) + { + return rectangle.Size; + } + var columns = GetColumnsCount(visibleChildren.Length, width); var rows = GetRowsCount(visibleChildren.Length, columns); - var boundsWidth = columns == 0 ? 0 : width / columns; + var boundsWidth = width / columns; var boundsHeight = childHeight; var bounds = new Rect(0, 0, boundsWidth, boundsHeight); var count = 0; @@ -51,7 +56,7 @@ public override Size ArrangeChildren(Rect rectangle) } } - return bounds.Size; + return rectangle.Size; } /// diff --git a/src/CommunityToolkit.Maui.UnitTests/Layouts/UniformItemsLayoutTests.cs b/src/CommunityToolkit.Maui.UnitTests/Layouts/UniformItemsLayoutTests.cs index 557c369f6e..7418f7694e 100644 --- a/src/CommunityToolkit.Maui.UnitTests/Layouts/UniformItemsLayoutTests.cs +++ b/src/CommunityToolkit.Maui.UnitTests/Layouts/UniformItemsLayoutTests.cs @@ -99,14 +99,14 @@ public void MaxRowsArrangeChildrenUniformItemsLayout() [Fact] public void ArrangeChildrenUniformItemsLayout() { - var expectedSize = new Size(childWidth, childHeight); - uniformChild = new TestView(expectedSize); + var childSize = new Size(childWidth, childHeight); + uniformChild = new TestView(childSize); uniformItemsLayout.CrossPlatformMeasure(double.PositiveInfinity, double.PositiveInfinity); var rect = new Rect(0, 0, childWidth * childCount, childHeight * childCount); uniformItemsLayout.Layout(rect); var actualSize = uniformItemsLayout.CrossPlatformArrange(rect); - Assert.Equal(expectedSize, actualSize); + Assert.Equal(childSize * childCount, actualSize); } class TestView : View