Xamarin表单-TableView下多余的多余空间

时间:2019-01-15 10:41:19

标签: xaml xamarin.forms tableview

我正在创建我的第一个Android应用程序。我想显示带有一些输入字段的TableView,然后显示一个用于处理输入的按钮。 我不知道为什么,但是TableView下有多余的空间,或者按钮与底部对齐,但与设置相反。

你能帮我解决吗?

<StackLayout Orientation="Vertical" VerticalOptions="Start"  Padding="20,15,20,0" Spacing="0">
    <Label Text="This is TableView"></Label>
    <TableView Intent="Settings" VerticalOptions="Start">
        <TableRoot>
            <TableSection>
                <ViewCell>
                    <StackLayout Orientation="Horizontal">
                        <Label Text="item 1"/>
                        <Entry></Entry>
                    </StackLayout>
                </ViewCell>
                <ViewCell>
                    <StackLayout Orientation="Horizontal">
                        <Label Text="item 2"/>
                        <Entry></Entry>
                    </StackLayout>
                </ViewCell>
            </TableSection>
        </TableRoot>
    </TableView>
    <Label Text="TableView - END"></Label>
    <Button Text="My button" TextColor="DodgerBlue" VerticalOptions="Start" HorizontalOptions="Fill" Margin="40, 10, 40, 10"/>

    <Frame VerticalOptions="StartAndExpand" BackgroundColor="Transparent" BorderColor="Black">
        <StackLayout Orientation="Vertical">
            <StackLayout Orientation="Horizontal" HorizontalOptions="Fill">
                <Label Text="aaaa" HorizontalOptions="StartAndExpand"></Label>
                <Label Text="value" HorizontalOptions="End"></Label>
            </StackLayout>
            <StackLayout Orientation="Horizontal">
                <Label Text="aaaa"></Label>
                <Label Text="value"></Label>
            </StackLayout>
            <StackLayout Orientation="Horizontal">
                <Label Text="aaaa"></Label>
                <Label Text="value"></Label>
            </StackLayout>
        </StackLayout>
    </Frame>
</StackLayout>

Screenshot

4 个答案:

答案 0 :(得分:1)

最好的选择是为每个单元格定义RowHeight,然后为表格视图指定HeightRequest。这样,您可以定义它将占据的空间

<TableView Margin="0" Intent="Settings"  HeightRequest="120" RowHeight="60" VerticalOptions="Start">

答案 1 :(得分:1)

当您询问除了使用TableView之外还可以做什么时,当然可以使用Grid,请参见以下示例:

<Grid VerticalOptions="StartAndExpand">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" /> <!-- for the label -->
        <ColumnDefinition Width="*" />
    <Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="1" /> <!-- For the separator, you might have to experiment with the height -->
        <RowDefinition Height="*" /> 
        <RowDefinition Height="1" />
    </Grid.RowDefinitions>
    <Label Text="Item 1" />
    <Entry Grid.Row="0" Grid.Column="1" />
    <BoxView BackgroundColor="Black" 
             HeightRequest="1" 
             Grid.Row="1" 
             Grid.Column="0" 
             Grid.ColumnSpan="2" /> <!-- The separator -->
    <Label Grid.Row="2" Grid.Column="0" Text="Item 2" />
    <Entry Grid.Row="2" Grid.Column="1" />
    <BoxView BackgroundColor="Black" 
             HeightRequest="1" 
             Grid.Row="3" 
             Grid.Column="0" 
             Grid.ColumnSpan="2" /> <!-- The separator -->
</Grid>

我正在使用黑色背景色的BoxView s和HeightRequest的{​​{1}}作为分隔符。您可能必须尝试颜色和高度才能获得所需的结果。低于1的值是可能的,并导致更细的行。在真实的示例中,我使用了1

无论如何,这会使XAML的方式更加混乱。 .5-设计(当我自己使用它们时)往往变得很笨拙。

答案 2 :(得分:0)

我不确定这是否是您要寻找的东西,但是我对问题的理解告诉我,您正在谈论Value这个标签正在远离其他标签。

如果您检查此标签的代码:

  <Label Text="value" HorizontalOptions="End"></Label>

HorizontalOptions设置为"End",这将导致开始进行更改将解决您的问题

如果我错过了任何内容,请随时还原

祝你好运

答案 3 :(得分:0)

不幸的是,这就是Xamarin.Forms TableView / ListView的工作方式。预计下面没有任何东西。如果您需要以下内容,则可以手动设置TableView的高度,也可以将内容放置在最后一个单元格中,这都不是完美的选择,但是无论如何您都需要寻找一些解决方法,因为这是设计使然(这是一种行为)如果您可以使用ListView而不是TableView,则稍微容易一些。