TableSection间距Android Xamarin.Forms

时间:2019-01-11 09:04:57

标签: android xamarin.forms tableview

我有1 TableView,3 TableSections。 在iOS中,TableSections之间有一个空格,这个空间不会在Android中复制,我该如何在Android中添加空格?而不破坏iOS布局。

我的想法:

  1. 添加一个禁用的空白单元格,该单元格仅在Android上显示。
  2. 使用仅在Android上显示的网格
  3. 特定于平台的XAML格式,如果== Android,则使用XAML-A,如果== iOS,则使用XAML-B
  4. 自定义渲染器。如果是这样,如何?

我愿意接受其他想法,或者有人可以告诉我推荐的方法,或者对我追求哪种想法表示赞赏。

2 个答案:

答案 0 :(得分:0)

我会使用PlatformSpecific代码:

<YourElement.Margin>
       <OnPlatform x:TypeArguments="Thickness">
       <On Platform="iOS" Value="0,0,0,0" />
       <On Platform="Android, WinPhone, Windows" Value="0,5,0,0" />
       </OnPlatform>
  </YourElement.Margin>

答案 1 :(得分:0)

解决方案:

我尝试过您的第一个想法Add a blank, disabled Cell which only shows on Android.,它有点复杂,让我们逐步进行:

首先,我在每个TableSection的末尾添加一个白色标签作为空格,这是我的Xaml,请记住设置您的tableview.HasUnevenRows="True"

<ContentPage.Content >
    <TableView Intent="Settings" HasUnevenRows="True">
        <TableView.BindingContext>
            <local:Model/>
        </TableView.BindingContext>

        <TableRoot>
            <TableSection Title="Getting Started">

                    <SwitchCell Text="New Voice Mail" />
                <SwitchCell Text="New Mail" On="true" />


                <!--use as space-->
                <ViewCell x:Name="cell2">
                    <StackLayout  x:Name="s1">
                        <Label Text="space"
                          TextColor="#f35e20" BackgroundColor="White" HorizontalTextAlignment="Center"  x:Name="spacelabel2"/>
                    </StackLayout>

                </ViewCell>
            </TableSection>

        <TableSection Title="Getting Started22222" >


                <ViewCell>
                <StackLayout Orientation="Vertical">
                    <Label Text="left"
                          TextColor="#f35e20" BackgroundColor="Blue"/>
                    <Label Text="right"
                          HorizontalOptions="EndAndExpand"
                          TextColor="#503026" BackgroundColor="Orange"/>
                </StackLayout>
            </ViewCell>


                <!--use as space-->
                <ViewCell x:Name="cell1">
                    <StackLayout x:Name="s2">
                        <Label Text="space"
                          TextColor="#f35e20" BackgroundColor="White" HorizontalTextAlignment="Center" x:Name="spacelabel1"/>
                    </StackLayout>

                </ViewCell>
            </TableSection>

            <TableSection Title="Getting Started33333" >
                <ViewCell>
                <StackLayout Orientation="Vertical">
                    <Label Text="left"
                          TextColor="#f35e20" BackgroundColor="Blue"/>
                    <Label Text="right"
                          HorizontalOptions="EndAndExpand"
                          TextColor="#503026" BackgroundColor="Orange"/>
                </StackLayout>
            </ViewCell>
        </TableSection>

    </TableRoot>
</TableView>
    </ContentPage.Content>

我给ViewCell命名为cell1cell2,然后在后面的代码中,我使用Device.RuntimePlatform来区分iOS或{{1 }}:

Android

因此,在iOS中,这些白色标签将不会显示在此页面中;在Android中,这些标签将显示在每个部分的末尾。您可以将标签的背景色设置为与 protected override void LayoutChildren(double x, double y, double width, double height) { base.LayoutChildren(x, y, width, height); if (Device.RuntimePlatform == Device.Android) { spacelabel1.IsVisible = true; spacelabel2.IsVisible = true; } else { cell2.Height = 0.01; cell1.Height = 0.01; cell1.View.IsVisible = false; cell2.View.IsVisible = false; } } 的颜色相同,然后看起来它们之间有一个空格。如有任何问题,请回复我。