Skip to content

Commit

Permalink
Ensure invisible views don't get rows/columns when generating AndExpa…
Browse files Browse the repository at this point in the history
…nd layouts

Fixes #11678
  • Loading branch information
hartez committed Nov 28, 2022
1 parent 4e1770e commit 1f67356
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/Controls/src/Core/Layout/AndExpandLayoutManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,16 @@ static IGridLayout ConvertToRows(StackLayout stackLayout)
RowSpacing = stackLayout.Spacing,
};

var row = 0;
for (int n = 0; n < stackLayout.Count; n++)
{
var child = stackLayout[n];

if (child.Visibility != Visibility.Visible)
{
continue;
}

if (child is View view && view.VerticalOptions.Expands)
{
grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Star });
Expand All @@ -70,7 +76,9 @@ static IGridLayout ConvertToRows(StackLayout stackLayout)
}

grid.Add(child);
grid.SetRow(child, n);
grid.SetRow(child, row);

row += 1;
}

return grid;
Expand All @@ -85,10 +93,16 @@ static IGridLayout ConvertToColumns(StackLayout stackLayout)
ColumnSpacing = stackLayout.Spacing
};

var column = 0;
for (int n = 0; n < stackLayout.Count; n++)
{
var child = stackLayout[n];

if (child.Visibility != Visibility.Visible)
{
continue;
}

if (child is View view && view.HorizontalOptions.Expands)
{
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Star });
Expand All @@ -99,7 +113,9 @@ static IGridLayout ConvertToColumns(StackLayout stackLayout)
}

grid.Add(child);
grid.SetColumn(child, n);
grid.SetColumn(child, column);

column += 1;
}

return grid;
Expand Down
44 changes: 44 additions & 0 deletions src/Controls/tests/Core.UnitTests/Layouts/AndExpandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -332,5 +332,49 @@ public void EnsuresMeasure()

(layout as Maui.ILayout).CrossPlatformArrange(new Rect(0, 0, 100, 100));
}

[Fact]
public void InvisibleViewsDoNotCreateColumns()
{
var view0 = new TestView
{
Text = "Hello",
HorizontalOptions = LayoutOptions.FillAndExpand,
IsVisible = false
};

var view1 = new TestView
{
Text = "Hello",
HorizontalOptions = LayoutOptions.FillAndExpand,
IsVisible = true
};

var layout = SetUpTestLayout(StackOrientation.Horizontal, view0, view1);

Assert.Equal(0, view1.Bounds.Left);
}

[Fact]
public void InvisibleViewsDoNotCreateRows()
{
var view0 = new TestView
{
Text = "Hello",
VerticalOptions = LayoutOptions.FillAndExpand,
IsVisible = false
};

var view1 = new TestView
{
Text = "Hello",
VerticalOptions = LayoutOptions.FillAndExpand,
IsVisible = true
};

var layout = SetUpTestLayout(StackOrientation.Vertical, view0, view1);

Assert.Equal(0, view1.Bounds.Top);
}
}
}

0 comments on commit 1f67356

Please sign in to comment.