在进行实验时,我遇到了一些我无法理解的东西。
我已经将代码简化到最基本的级别。 以下是页面中 xaml 的示例 -
<StackLayout Spacing="0">
<ContentView BackgroundColor="Yellow" HeightRequest="70"/>
<ContentView BackgroundColor="DarkBlue" VerticalOptions="FillAndExpand">
<ScrollView>
<StackLayout x:Name="scroll">
</StackLayout>
</ScrollView>
</ContentView>
</StackLayout>
(在我的实际代码中,我使用的是从<ContentView>
派生的自定义视图,但问题仍然存在( 注意第一个内容视图上的高度请求
这是背后的代码
public partial class MainPage : ContentPage
{
private readonly int number = 100;
public MainPage()
{
InitializeComponent();
for (int i = 0; i < number; i++) {
scrollBoi.Children.Add(new Label() {
Text = i.ToString(),
TextColor = Color.White
});
}
}
}
它只是将 100 个标签添加到<ScrollView>
中的<Stacklayout>
这是安卓上的结果。
显然,黄色内容视图不是 70px 高。
为澄清起见,如果我删除代码隐藏中的代码,以便没有标签添加到<StackLayout>
,那么这就是结果。内容视图尚未被挤压。我还发现,我添加到ScrollView的标签越多,ContentView就越小。
有趣的是,如果我使用<StackLayout>
而不是<ContentView>
,则不会出现此问题,就像这样
<StackLayout HeightRequest="70" BackgroundColor="Yellow"/>
<ContentView BackgroundColor="DarkBlue" VerticalOptions="FillAndExpand">
<ScrollView>
<StackLayout x:Name="scroll">
</StackLayout>
</ScrollView>
</ContentView>
</StackLayout>
这是结果 - 并且是期望的结果。但是,我想使用内容视图,而不是堆栈布局。 我认为内容视图有一些奇怪的事情,但我真的不确定。
任何解释或帮助将不胜感激,
谢谢!
解决方案 1 :
您可以将它们放在网格中而不是StackLayout中。
<Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="70" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentView Grid.Row="0" BackgroundColor="Yellow" HeightRequest="70"/>
<ContentView Grid.Row="1" BackgroundColor="DarkBlue" VerticalOptions="FillAndExpand">
<ScrollView>
<StackLayout x:Name="scroll">
</StackLayout>
</ScrollView>
</ContentView>
</Grid>
解决方案 2:
设置属性MinimumHeightRequest
<ContentView BackgroundColor="Yellow" HeightRequest="70" MinimumHeightRequest="70" />