Xamarin формы - нежелательное дополнительное пространство под TableView - PullRequest
0 голосов
/ 15 января 2019

Я создаю свое первое приложение для 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 голосов
/ 16 января 2019

Поскольку вы спрашивали, что вы можете сделать, кроме использования 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 возможны и приводят к более тонким линиям. В реальном примере я использовал .5.

В любом случае, это делает XAML более загроможденным. Grid -дизайны (в то время как я сам их использую) имеют тенденцию становиться довольно громоздкими.

0 голосов
/ 15 января 2019

Я не уверен, что это то, что вы ищете, но мое понимание вопроса говорит мне, что вы говорите о ярлыке Value, который находится далеко от остальных.

если вы проверите код для этого ярлыка:

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

HorizontalOptions установлен на "End", что приводит к изменению его запуска, чтобы решить вашу проблему

Не стесняйтесь вернуться в случае, если я что-то пропустил

Гудлак

0 голосов
/ 15 января 2019

К сожалению, так работает Xamarin.Forms TableView / ListView. Там не должно быть ничего ниже. Если вам нужно что-то ниже, вы можете либо установить высоту TableView вручную, либо поместить содержимое в последнюю ячейку, ни одна из них не идеальна, но в любом случае вам нужно найти какой-то обходной путь, так как это поведение по своему замыслу (это было бы немного проще, если бы вы могли использовать ListView вместо TableView).

0 голосов
/ 15 января 2019

Лучшим вариантом является определение RowHeight для каждой ячейки, а затем указание HeightRequest для табличного представления. таким образом, вы можете определить пространство, которое он будет занимать

<TableView Margin="0" Intent="Settings"  HeightRequest="120" RowHeight="60" VerticalOptions="Start">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...