在反复试验的过程中,我遇到了一些我无法理解的东西。
我已将代码简化到最基本的级别。
这是页面中xaml的示例-
<StackLayout Spacing="0">
<ContentView BackgroundColor="Yellow" HeightRequest="70"/>
<ContentView BackgroundColor="DarkBlue" VerticalOptions="FillAndExpand">
<ScrollView>
<StackLayout x:Name="scroll">
</StackLayout>
</ScrollView>
</ContentView>
</StackLayout>
(在我的实际代码中,我使用的是从<ContentView>
派生的自定义视图,但问题仍然存在)
注意在第一个contentview上的heightrequest
这是背后的代码
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个标签添加到<Stacklayout>
中的<ScrollView>
Here是Android上的结果。
很明显,黄色contentview的高度不是70px。
为了澄清起见,如果我删除了后面代码中的代码,因此没有在<StackLayout>
上添加任何标签,则结果为this。 ContentView尚未压缩。我还发现,添加到ScrollView中的标签越多,ContentView就会变得越小。
有趣的是,如果我使用<StackLayout>
而不是<ContentView>
,就不会出现此问题
<StackLayout HeightRequest="70" BackgroundColor="Yellow"/>
<ContentView BackgroundColor="DarkBlue" VerticalOptions="FillAndExpand">
<ScrollView>
<StackLayout x:Name="scroll">
</StackLayout>
</ScrollView>
</ContentView>
</StackLayout>
Here是结果-也是期望的结果。但是,我想使用内容视图,而不是堆栈布局。 我认为contentview发生了一些奇怪的事情,但我真的不确定。
任何解释或帮助将不胜感激,
谢谢!
答案 0 :(得分:0)
解决方案1:
您可以将它们放在 Grid 中,而不是 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" />