Reputation: 570
I am trying to make a page which has a top row (toolbar), main content in the middle, then a status bar along the bottom of the screen. If the main content is too large then I want it to scroll. Should be easy - right?
Below is the XAML I have been using but just can't seem to get it to work. More accurately - I can't get it to work on iOS. It works fine on Android but in iOS it just expands off the bottom of the screen so I can't see it.
Any suggestions?
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition />
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<BoxView Grid.Column="0" Grid.Row="0" Color="Green"/>
<Label Text="Row 0, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<BoxView Grid.Row="1" Color="Teal" />
<ScrollView Grid.Row="1" VerticalOptions="FillAndExpand">
<StackLayout>
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
<Label Text="Row 1, Column 0" HorizontalOptions="Center" VerticalOptions="Center" />
</StackLayout>
</ScrollView>
<BoxView Grid.Row="2" Color="Red" />
<Label Grid.Row="2" Text="Row 2, Columns 0 and 1" HorizontalOptions="Center" VerticalOptions="Center" />
</Grid>
Upvotes: 3
Views: 4966
Reputation: 21321
Ewerspej's comment on question links to the known issue.
Until this is fixed, a work-around is to set a numeric height on the grid row.
You'll have to manually subtract the heights of other content. In your case, subtract 200 from the screen height:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="{Binding ScrollViewRowHeight, Source={RelativeSource Self}" />
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
code-behind:
public double ScrollViewRowHeight { get; set; }
...
// constructor
public MyPageNameHere()
{
InitializeComponent();
var screenHeight = Microsoft.Maui.Devices.DeviceDisplay.MainDisplayInfo.Height;
ScrollViewRowHeight = screenHeight - 200;
...
}
Upvotes: 0