2016-06-21 7 views
7

W mojej aplikacji formularzy Xamarin muszę ustawić górne dopełnienie dla kontrolki wprowadzania w systemie iOS. Tworzyłem rendery dla Entry, ale tylko ja jestem w stanie ustawić dopełnienie Left i Right. Proszę pomóż mi. Poniżej znajduje się mój Renderer WejścieJak ustawić górne dopełnienie wpisu w formularzach Xamarin

public class CustomRenderer: EntryRenderer 
{ 
    protected override void OnElementChanged (ElementChangedEventArgs<Entry> e) 
    { 
     base.OnElementChanged (e); 
     if (Control != null) { 
      Control.LeftView = new UIView (new CGRect (0, 0, 15, 0)); 
      Control.LeftViewMode = UITextFieldViewMode.Always; 

     } 
    } 

} 
+3

myślę, można uniknąć stosując renderujący. Możesz spróbować użyć 'Margin' dla' Entry'. Drugą rzeczą jest to, że Twój "wpis" nie ma wolnej przestrzeni u góry, więc nie mógł dodać tego wcięcia. Czy możesz dodać kod, jak zlokalizować swój "wpis"? –

+2

Użyj właściwości margin '' so np. 'Margin =" 0, 10, 0, 0 "' –

+1

Potrzebuję ustawić dopełnienie dla tekstu wewnątrz wpisu, więc nie można użyć marginesu –

Odpowiedz

5

Aby to osiągnąć, musimy zrobić dwie rzeczy:

  1. zwiększyć wysokość Entry w Xamarin.Forms
  2. Załóż iOS niestandardowy Renderer, aby wyrównać tekst do dołu UITextField enter image description here

Zwiększ wysokość wpisu w Xamarin.Forms

W tym przykładzie używam RelativeLayout do ustawienia wysokości wyściełanego wejścia na 50, Constraint.Constant(50).

using System; 

using Xamarin.Forms; 

namespace CustomEntrySample 
{ 
    public class EntryWithTopPadding : Entry 
    { 
    } 

    public class App : Application 
    { 
     public App() 
     { 
      var normalEntry = new Entry 
      { 
       Text = "This Entry Has Normal Padding", 
       BackgroundColor = Color.Lime 
      }; 

      var paddedEntry = new EntryWithTopPadding 
      { 
       Text = "This Entry Has Extra Top Padding", 
       BackgroundColor = Color.Aqua 
      }; 

      var mainLayout = new RelativeLayout(); 
      mainLayout.Children.Add(
       normalEntry, 
       Constraint.Constant(0), 
       Constraint.RelativeToParent(parent => parent.Y + 10), 
       Constraint.RelativeToParent(parent => parent.Width) 
      ); 
      mainLayout.Children.Add(
       paddedEntry, 
       Constraint.Constant(0), 
       Constraint.RelativeToView(normalEntry, (parent, view) => view.Y + view.Height + 10), 
       Constraint.RelativeToParent(parent => parent.Width), 
       Constraint.Constant(50) 
      ); 

      MainPage = new NavigationPage(
       new ContentPage 
       { 
        Title = "Title", 
        Content = mainLayout, 
        Padding = new Thickness(10, 0, 10, 0) 
       } 
      ); 
     } 
    } 
} 

Tworzenie niestandardowej Renderer, aby wyrównać tekst do dna UITextField

Ustaw właściwość UITextFieldVerticalAlignment do UIControlContentVerticalAlignment.Bottom

using UIKit; 

using CustomEntrySample; 
using CustomEntrySample.iOS; 

using Xamarin.Forms; 
using Xamarin.Forms.Platform.iOS; 

[assembly: ExportRenderer(typeof(EntryWithTopPadding), typeof(EntryWithTopPaddingCustomRenderer))] 
namespace CustomEntrySample.iOS 
{ 
    public class EntryWithTopPaddingCustomRenderer : EntryRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) 
     { 
      base.OnElementChanged(e); 

      if(Control == null) 
       return; 

      Control.VerticalAlignment = UIControlContentVerticalAlignment.Bottom; 
     } 
    } 
}