【问题标题】:AbsoluteLayout.LayoutBounds position using Xamarin.form XamlAbsoluteLayout.LayoutBounds 位置使用 Xamarin.form Xaml
【发布时间】:2016-12-06 10:37:54
【问题描述】:

在 Xamarin.form Xaml 中:当我给 AbsoulteLayout layoutBounds(.5,.5,.5,.5) 时,它会出现在中心位置,但不适用于 ios ......如果我使用的是 (.75,. 75,.5,.5) 它在 Xamarin 表单 xaml 页面中为 ios 而不是 android 的中心出现.....如何为 ios 和 android 设置相同的 layoutBounds

举个例子:

<AbsoluteLayout BackgroundColor="#99000000"
                    HorizontalOptions="FillAndExpand"                   
                    IsVisible="{Binding xyz}"
                    VerticalOptions="FillAndExpand">

      <AbsoluteLayout x:Name="xyz"
                     AbsoluteLayout.LayoutBounds="0.5, 0.5, 0.5, 0.5"
                     AbsoluteLayout.LayoutFlags="All"
                       BackgroundColor="Transparent"
                       HorizontalOptions="CenterAndExpand"
                       VerticalOptions="CenterAndExpand" />
</AbsoluteLayout>

【问题讨论】:

  • 把你的整个例子。如果不设置Width/Height,我无法看到内部AbsoluteLayout。如果我将内部 AbsoluteLayout 更改为 Frame 并设置一些背景,那么我可以看到内部内容,并且它位于两者的中心。你能告诉我你如何设置内部AbsoluteLayout的大小吗?
  • @EgorGromadskiy 我们正在使用 HeightRequest/WidthRequest 手动设置高度和宽度,并将该布局动态添加到内部绝对布局。有什么方法可以在不使用 OnPlatform 的情况下实现,以便它适用于所有平台。

标签: xaml layout xamarin xamarin.forms


【解决方案1】:

您可以使用OnPlatform 在不同平台上设置不同的值。

例如:

<ContentPage.Padding>
    <OnPlatform x:TypeArguments="Thickness">
      <OnPlatform.iOS>
        0, 20, 0, 0
      </OnPlatform.iOS>
      <OnPlatform.Android>
        0, 0, 0, 0
      </OnPlatform.Android>
      <OnPlatform.WinPhone>
        0, 0, 0, 0
      </OnPlatform.WinPhone>
    </OnPlatform>
  </ContentPage.Padding>

修改您的代码(未经测试):

<AbsoluteLayout BackgroundColor="#99000000"
                    HorizontalOptions="FillAndExpand"                   
                    IsVisible="{Binding xyz}"
                    VerticalOptions="FillAndExpand">

      <AbsoluteLayout x:Name="xyz"                     
                       AbsoluteLayout.LayoutFlags="All"
                       BackgroundColor="Transparent"
                       HorizontalOptions="CenterAndExpand"
                       VerticalOptions="CenterAndExpand" >
            <AbsoluteLayout.LayoutBounds>
                     <OnPlatform x:TypeArguments="Rectangle">
                        <OnPlatform.iOS>
                              0.75, 0.75, 0.5, 0.5
                        </OnPlatform.iOS>
                        <OnPlatform.Android>
                              0.5, 0.5, 0.5, 0.5
                        </OnPlatform.Android>
                        <OnPlatform.WinPhone>
                              0, 0, 0, 0
                        </OnPlatform.WinPhone>
                     </OnPlatform>
            </AbsoluteLayout.LayoutBounds>
      </AbsoluteLayout>
</AbsoluteLayout>

【讨论】:

  • 我们可以使用 OnPlatform 实现相同的布局,但有什么方法可以在不使用它的情况下实现,以便它适用于所有平台。
  • 有些东西是特定于平台的,比如 iOS 的顶部填充。你不能一概而论。
【解决方案2】:

感谢您的回复。 我已经解决了与绝对布局中的中心对齐相关的问题,希望对您有所帮助

    <AbsoluteLayout Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"    IsVisible="{Binding ShowPopup}">
        <BoxView Color="#99000000" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" />
        <StackLayout x:Name="Popup" Padding="6" Orientation="Horizontal" BackgroundColor="Transparent" AbsoluteLayout.LayoutBounds="0.5, 0.5, -1, -1" AbsoluteLayout.LayoutFlags="PositionProportional">
        </StackLayout>
    </AbsoluteLayout>

【讨论】:

    【解决方案3】:

    这样我们可以在AbsoluteLayout 中为每个控件使用LayoutBounds 的平台指令

    <Label AbsoluteLayout.LayoutFlags="PositionProportional">
      <Label.AbsoluteLayout.LayoutBounds>
             <OnPlatform x:TypeArguments="Rectangle" iOS="..." Android="..." /> 
        </Label.AbsoluteLayout.LayoutBounds>
    </Label>
    

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      相关资源
      最近更新 更多