2017-05-07 98 views
2

我需要具有固定高度的塊(例如200)和背景圖像,該塊應該爲AspectFill此塊和StackLayout在此塊底部具有未知高度。Xamarin.Forms中佈局背景圖像

我試着用RelativeLayout並把ImageStackLayout放在裏面。圖片放置完美,但我不知道如何將StackLayout放在底部。

這種佈局containes 2 Labels,所以我不能硬編碼的HeightConstraitYConstrait恆定,becouse它的文字可能在不同的平臺和屏幕大小(或者,也許,這是錯的?)

不同高度

我該怎麼做?

enter image description here

+1

[Xamarin在底部形成相對佈局位置stacklayout]的可能重複(http://stackoverflow.com/questions/42919941/xamarin-forms-relative-layout-position-stacklayout-at-bottom) –

回答

3

一種替代我使用的相對佈局方法:

這基本上使用彼此重疊並填充可用的空間中的圖像和一個堆棧佈局。內部堆棧佈局然後能夠從最後擴展。如果要創建向上擴展的「最大」數量(例如圖像的最大50%),可以將外部佈局更改爲「layoutBounds 1,1,1,.5」

下面的代碼使用背景顏色所以你可以很容易地看到它,如果複製。 大量修改選項,例如使用背景圖像和堆疊佈局以外的其他項目,例如框架。

<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
    <Image BackgroundColor="Red" AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All" Aspect="AspectFill"></Image> 
    <StackLayout AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All" BackgroundColor="Transparent"> 
     <StackLayout BackgroundColor="Blue" HorizontalOptions="FillAndExpand" VerticalOptions="EndAndExpand" Orientation="Vertical"> 
      <Label Text="Label 1"></Label> 
      <Label Text="Label 2"></Label> 
     </StackLayout> 
    </StackLayout> 
</AbsoluteLayout> 
1

另一種方法是使用網格。

<Grid> 
    <Image Source="..." /> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 

     <StackLayout Grid.Row="1">  
     </StackLayout> 
    </Grid> 
</Grid> 

雖然您可以從AbsoluteLayout或Grid中進行選擇,但我建議您避開RelativeLayout。這是比較低效的佈局之一。