ScrollView压缩了ContentView

时间:2019-12-29 19:15:44

标签: c# android xamarin mobile


在反复试验的过程中,我遇到了一些我无法理解的东西。
我已将代码简化到最基本的级别。 这是页面中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发生了一些奇怪的事情,但我真的不确定。

任何解释或帮助将不胜感激,
谢谢!

1 个答案:

答案 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" />