Xamarin.Forms - 两个StackLayouts之间的额外空间

时间:2017-03-14 18:55:03

标签: xamarin xamarin.forms

我有一个Xamarin.Forms XAML设置如下,但不知道为什么两个StackLayout实例之间有额外的空间。我尝试将填充设置为0并将边距设置为0,但仍然存在空间和最后StackLayout之间的空格。

<StackLayout Spacing="0" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" HeightRequest="500" Margin="0" Padding="0">
        <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" HeightRequest="20" Margin="0" Padding="0">
          <Label Text="MyTest" HorizontalOptions="Center"></Label>
        </StackLayout>
        <StackLayout VerticalOptions="CenterAndExpand" Padding="10,0,10,0" HeightRequest="500" Margin="0">
          <ListView x:Name ="listView" ItemsSource="{Binding MyBinding}">
            <ListView.ItemTemplate>
              <DataTemplate>
                <ViewCell>
                  <Grid>
                    <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="0.9*" />
                      <ColumnDefinition Width="0.1*" />
                    </Grid.ColumnDefinitions>
                    <Label Grid.Column="0" Text="{Binding MyName}"  FontAttributes="Bold" VerticalTextAlignment="Center"/>
                    <Label Grid.Column="1" Text="{Binding MyValue}"  FontAttributes="Bold" VerticalTextAlignment="Center"/>
                  </Grid>
                </ViewCell>
              </DataTemplate>
            </ListView.ItemTemplate>
          </ListView>
        </StackLayout>
      </StackLayout>

3 个答案:

答案 0 :(得分:2)

似乎你没有为第一个StackLayout设置任何VerticalOptions,这就是为什么它只是包装Label并留下一个空的空间,因为你将另一个StackLayout设置为VerticalOption为CenterAndExpand

要解决此问题,您可以选择以下几个选项:

1:将VerticalOption设置为FillAndExpand到包含ListView的StackLayout

    <StackLayout VerticalOptions="FillAndExpand" Padding="10,0,10,0" HeightRequest="500" Margin="0">
      <ListView x:Name ="listView" ItemsSource="{Binding MyBinding}">
        <ListView.ItemTemplate>
          <DataTemplate>
            <ViewCell>
              <Grid>
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="0.9*" />
                  <ColumnDefinition Width="0.1*" />
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Text="{Binding MyName}"  FontAttributes="Bold" VerticalTextAlignment="Center"/>
                <Label Grid.Column="1" Text="{Binding MyValue}"  FontAttributes="Bold" VerticalTextAlignment="Center"/>
              </Grid>
            </ViewCell>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>
    </StackLayout>

2:将VerticalOption设置为EndAndExpand,使用Label和VerticalOption作为StartAndExpand将第一个StackLayout设置为带有List的第二个StackLayout。

    <StackLayout Orientation="Horizontal" VerticalOptions="EndAndExpand" HorizontalOptions="FillAndExpand" HeightRequest="20" Margin="0" Padding="0">
      <Label Text="MyTest" HorizontalOptions="Center"></Label>
    </StackLayout>

    <StackLayout VerticalOptions="StartAndExpand" Padding="10,0,10,0" HeightRequest="500" Margin="0">
      <ListView x:Name ="listView" ItemsSource="{Binding MyBinding}">
        <ListView.ItemTemplate>
          <DataTemplate>
            <ViewCell>
              <Grid>
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="0.9*" />
                  <ColumnDefinition Width="0.1*" />
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Text="{Binding MyName}"  FontAttributes="Bold" VerticalTextAlignment="Center"/>
                <Label Grid.Column="1" Text="{Binding MyValue}"  FontAttributes="Bold" VerticalTextAlignment="Center"/>
              </Grid>
            </ViewCell>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>
    </StackLayout>

测试两者并查看哪一个更适合您的设计需求,因为每个都会以不同的方式放置UI控制器。

希望这会有所帮助.-

答案 1 :(得分:1)

您可以随时尝试添加负边距值。 我有一个类似的问题,我可以通过在第二个布局中添加-5的保证金来解决。

<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<StackLayout AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" >
    <StackLayout x:Name="lOne" Orientation="Horizontal" VerticalOptions="Start" />
    <StackLayout x:Name="lTwo" Orientation="Horizontal" Margin="-5" HorizontalOptions="CenterAndExpand" VerticalOptions="Start" Padding="10"/>
</StackLayout>

在添加背景颜色时,我有一个空间可以看到。 当我添加Margin =“ - 5”时,空间消失了。

答案 2 :(得分:1)

您可以将父布局的间距设置为-6。 间距是设备像素中的值,表示每个元素之间的空间量。默认值为6.0 ....