2016-04-05 21 views
0

Ben Gusman tavsiyesini izledi ve ben bu sırada düzeni tarafından konumlandırılan:Aygıtta dikey olarak kaydırırken görünümün alt kısmındaki düğmeyi nasıl düzeltebilirim?

Ben bütün düzeni boyunca kaydırma yaparken benim Düğme Cihazım'da altındaki düzeltilmesi istiyorum
->StackLayout, VerticalOptions=FillAndExpand 
    ->ScrollView, VerticalOptions=FillAndExpand 
    ->RelativeLayout 
    ->StackLayout 
    ->StackLayout 
    ->Button, VerticalOptions=EndAndExpand 

. Ancak görünüm, kullanım düğmesini veya tam kaydırma çubuğunu göstermez. Bu iki öğenin neden manzarada görüntülenmediğinden emin değilim.

Aygıtta dikey olarak kaydırırken, görünümün alt kısmındaki düğmeyi nasıl düzeltebilirim? Böyle bir şey istiyorum anlıyorum aclaration için

public StackLayout OffersSlideViewCarouselChild(Offer offer) 
{ 
    Image productImage = new Image 
    { 
     Source = ImageSource.FromUri(new Uri(offer.Image.Replace("https://", "http://"))), 
     HorizontalOptions = LayoutOptions.CenterAndExpand, 
     VerticalOptions = LayoutOptions.CenterAndExpand, 
     HeightRequest = 300, 
     WidthRequest = 300, 
     Aspect = Aspect.AspectFit 
    }; 

    var topStackLayout = new StackLayout 
    { 
     HorizontalOptions = LayoutOptions.CenterAndExpand, 
     VerticalOptions = LayoutOptions.Center, 
    }; 
    topStackLayout.Children.Add(productImage); 

    StackLayout contentStackLayout = new StackLayout 
    { 
     Padding = new Thickness(16, 16, 16, 10), 
     Orientation = StackOrientation.Vertical, 
     HorizontalOptions = LayoutOptions.FillAndExpand, 
    }; 
    var savedBtn = SavedButtonLayout(offer.IsSelected, offer.Id); 
    var redeemBtn = RedeemBtnLayout(offer.Id); 
    var timeRemainingLabel = TimeRemainingLayout(offer, offer.Id); 

    contentStackLayout.Children.Add(new UILabel(16) { 
     Text = offer.ProductName, 
     TextColor = ColorHelper.FromHex(CoreTheme.COLOR_OFFERCELL_PRODUCT_TEXT), 
     FontFamily = CoreTheme.FONT_FAMILY_DEFAULT_BOLD 
    }); 

    contentStackLayout.Children.Add(new UILabel(14) { 
     Text = offer.LongRewardsMessage, 
     TextColor = ColorHelper.FromHex(CoreTheme.COLOR_DEAL_PAGE_LONG_REWARD_MESSAGE_RED), 
     FontFamily = CoreTheme.FONT_FAMILY_DEFAULT_BOLD 

    }); 

    if (!string.IsNullOrEmpty(offer.PowerMessage)) { 
     var htmlText = string.Format("<html><body style='color:#9b9b9b'>{0}</body></html>", offer.PowerMessage.Replace(@"\", string.Empty)); 

     var browser = new WebView() { 
      HeightRequest = (DeviceDisplaySettings.defaultheight > 600) ? 240 : 150, 
      Source = new HtmlWebViewSource() { Html = htmlText }, 
     }; 
     browser.Navigating += OnNavigating; 

     contentStackLayout.Children.Add(browser); 
    } 

    var mainRelLayout = new RelativeLayout(); 

    mainRelLayout.Children.Add(savedBtn, 
     xConstraint: Constraint.Constant(0), 
     yConstraint: Constraint.Constant(0), 
     widthConstraint: Constraint.RelativeToParent((parent) => 
     { 
      return parent.Width; 
     }), 
     heightConstraint: Constraint.RelativeToParent((parent) => 
     { 
      return 40; 
     }) 
     ); 


    mainRelLayout.Children.Add(topStackLayout, 
     Constraint.RelativeToParent((parent) => { return (parent.Width - productImage.Width)/2; }), 
     Constraint.RelativeToParent((parent) => { return parent.Y; }) 
    ); 

    mainRelLayout.Children.Add(timeRemainingLabel, 
     null, 
     Constraint.RelativeToView(topStackLayout, (parent, sibling) => { return sibling.Height; }) 
     ); 

    mainRelLayout.Children.Add(contentStackLayout, 
     null, 
     Constraint.RelativeToView(topStackLayout, (parent, sibling) => { return sibling.Height; }) 
    ); 


    var mainScrollView = new ScrollView() 
    { 
     VerticalOptions = LayoutOptions.FillAndExpand, 
     Orientation = ScrollOrientation.Vertical, 
     WidthRequest = DeviceDisplaySettings.defaultwidth, 
     HeightRequest = DeviceDisplaySettings.defaultheight, 
     Content = mainRelLayout 
    }; 

    var mainStackLayout = new StackLayout() 
    { 
     Spacing = 0, 
     Padding = new Thickness(0, 0, 0, 0), 
     VerticalOptions = LayoutOptions.FillAndExpand, 
     HorizontalOptions = LayoutOptions.FillAndExpand, 
     Orientation = StackOrientation.Vertical, 
     Children = { mainScrollView, redeemBtn } 

    }; 

    return mainStackLayout; 
} 
+0

Bazı artışlar, relativeLayout öğelerini bir kaydırma görünümü içine eklemek veya ilgili düzende kaydırma görünümü eklemek ister misiniz? – Gusman

+0

Göreli bir düzenim var ama tüm görüntüyü yatay olarak kaydırılabilir yapmak istiyorum. bu mantıklı mı? Muhtemelen göreceli yerleşime kaydırmak ister misiniz? Bu doğru mu? Teşekkürler! –

cevap

2

Verdiğiniz tel kafesin (http://imgur.com/wWBUNud) baktıktan sonra bu kullandığım olacaktınız

<?xml version="1.0" encoding="UTF-8"?> 
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="FormsSandbox.XamlPage"> 

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

     <ScrollView Orientation="Vertical"> 

      <!---Using StackLayout here to make sure scrolling works as 
       expected - but put your RelativeLayout content here instead --> 
      <StackLayout Spacing="0"> 
       <BoxView BackgroundColor="Red" HeightRequest="50"/> 
       <BoxView BackgroundColor="Yellow" HeightRequest="100"/> 
       <BoxView BackgroundColor="Red" HeightRequest="50"/> 
       <BoxView BackgroundColor="Yellow" HeightRequest="100"/> 
       <BoxView BackgroundColor="Red" HeightRequest="50"/> 
       <BoxView BackgroundColor="Yellow" HeightRequest="100"/> 
       <BoxView BackgroundColor="Red" HeightRequest="50"/> 
       <BoxView BackgroundColor="Yellow" HeightRequest="100"/> 
       <BoxView BackgroundColor="Red" HeightRequest="50"/> 
       <BoxView BackgroundColor="Yellow" HeightRequest="100"/> 
       <BoxView BackgroundColor="Red" HeightRequest="50"/> 
       <BoxView BackgroundColor="Yellow" HeightRequest="100"/> 
       <BoxView BackgroundColor="Red" HeightRequest="50"/> 
      </StackLayout> 

     </ScrollView> 

     <Button Grid.Row="1" Text="REDEEM"/> 
    </Grid> 

</ContentPage> 

(Ben daha belirgin görsel yapıyı yapmak için buraya XAML kullanıyorum not) Running the above layout on iOS

+0

Güncellenen gönderiye bir göz atabilir misiniz? Benim kullanım düğmem görünmüyor. –

+0

StackLayout'unuz artık güncellenmiş kodunuza göre ekrandan daha büyük. ScrollView'ınıza, cihaz ekran boyutuna eşit bir genişlik/yükseklik talebi verilir ve ardından bu düğme, onu yerleştirmek için genişleyecek olan StackLayout'un içine yerleştirilir. Bu nedenle, tuş muhtemelen ekranın alt kısmının altındadır. –

+0

Hedefinizin ne olduğuna dair bir telemetre sağlayabiliyorsanız, size yardımcı olmayı kolaylaştırır –

0

:

->ScrollView 
    ->RelativeLayout 
    ->StackLayout 
    ->StackLayout 
    ->Button 

Ama sayfa kaydırılan bile altındaki düğmeye düzeltmek istiyorum

İşte benim son kod. Bu yapı sayesinde

bunu yapmak için sadece mümkün değildir ama böyle bir yapıyla bunu düzeltmek çok kolay: yerleştirdiğiniz bir scrollview dolduracak olan nerede bir kök StackLayout olacak

->StackLayout, VerticalOptions=FillAndExpand 
    ->ScrollView, VerticalOptions=FillAndExpand 
    ->RelativeLayout 
     ->StackLayout 
     ->StackLayout 
    ->Button, VerticalOptions=EndAndExpand 

Bu yapı sayesinde Ekranın altına yapışacak olan Düğme tarafından çekilen alan hariç tüm ekran.

Bunun mantıklı olmasını umuyorum.

Şerefe.

+0

Denemeyi deneyeceğim ama eğer düğme yığın düzeni içerisindeyse? –

+0

düğmesinin altta kalmasını istediğinizde, aşağıdaki kaydırma düzeninin dışında bir yere konumlandırmanız gerekiyor, eğer başka bir StackLayout ile çevreliyorsanız, bunu scrollview'in altına eklerken hiçbir şey yapmazsınız (eklemek istemediğiniz sürece) Sayfanın altındaki daha yapışkan şeyler, ancak sadece başka bir gereksiz konteyner eklemek, kök yığını düzeni bunu yapmanıza izin verecektir). – Gusman

+0

Bir sorum daha var, ScrollView, "Çocuklar" için containa tanımı değil ... yani, göreli düzeni ScrollView'a bir çocuk olarak eklemek istiyorsam. Bunu nasıl yaparım? –