2016-06-21 4 views
7

In meiner Xamarin-Formularanwendung muss ich eine obere Auffüllung für die Eintragskontrolle in iOS festlegen. Ich habe Renderer für Entry erstellt, aber nur ich kann Padding links und rechts setzen. Bitte hilf mir. Es folgt die mein Eintrag RendererSo legen Sie die obere Auffüllung des Eintrags in Xamarin-Formularen fest

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

Ich denke, man könnte mit Renderer vermeiden. Sie könnten versuchen, 'Margin' für' Entry' zu verwenden. Die zweite Sache ist vielleicht, dass Ihr 'Eintrag' oben keinen freien Platz hat, also konnte er diesen Einzug nicht hinzufügen. Könnten Sie Code hinzufügen, wie Sie Ihren "Eintrag" finden? –

+2

Verwenden Sie Margin-Eigenschaft '' so z. 'Margin =" 0, 10, 0, 0 "' –

+1

Ich muss Padding für den Text innerhalb des Eintrags setzen, also kann Rand nicht verwendet werden –

Antwort

5

Um dies zu erreichen, müssen wir zwei Dinge tun:

  1. Erhöhen Sie die Höhe des Entry in Xamarin.Forms
  2. ein iOS Benutzerdefinierte Renderer erstellen ausrichten der Text an der Unterseite des den Eintrag Höhe UITextField enter image description here

erhöhen in Xamarin.Forms

In diesem Beispiel verwende ich RelativeLayout, um die Höhe des gepolsterten Eintrags auf 50, Constraint.Constant(50) festzulegen.

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) 
       } 
      ); 
     } 
    } 
} 

Erstellen von benutzerdefinierten Renderer Text der Unterseite des UITextField

Set an Richten Sie die VerticalAlignment Eigenschaft des UITextField zu 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; 
     } 
    } 
}