2012-07-12 17 views
5

Mam UITextfield z tekstem zastępczym.Symbol zastępczy i wpisany tekst nie wyrównywanie w UITextField

Użyłem obu właściwości wyrównania. Jednak tekst na uchwytach jest wciąż trochę na górnej stronie. Czy ktoś może mi pomóc?

Dzięki.

+0

Można zaksięgować rzeczywisty kod, którego używasz? – Nosrettap

+0

@Nosrettap: Utworzono za pomocą IB. – Ahsan

+0

Mam nadal ten problem. Czy kiedykolwiek znalazłeś poprawkę? :/ –

Odpowiedz

0

Zgodnie z dokumentacją UITextField należy korzystać z właściwości textAlignment. Ponieważ dokument stwierdza: "Ta właściwość dotyczy zarówno głównego ciągu tekstowego, jak i łańcucha zastępczego, domyślną wartością tej właściwości jest UITextAlignmentLeft."

Więc twój kod będzie wyglądać następująco:

textfield.textAlignment = UITextAlignmentLeft 

lub w zależności od tego, jak chcesz wyrównać tekst można użyć UITextAlignmentCenter lub UITextAlignmentRight po znaku =.

+0

Cóż, to nie pomoże. To tak, jakby wpisany tekst był wyrównany lub tekst zastępczy jest wyrównany (środkowe pionowe wyrównanie). Nie wiem, dlaczego te dwa teksty nie są odpowiednio wyrównane – Ahsan

0

Powiedziałbym, że baw się z Y Rozmiar używanego CGRectMake do stworzenia ramki. Może go zmniejszyć?

3
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
1

Oto moje rozwiązanie w MonoTouch dla konieczności ustalenia wyrównania znaku zastępczego względem tekstu. Jak zauważyłem w komentarzach - istnieją trzy odrębne elementy: edycja, statyczny tekst i statyczny symbol zastępczy. Odpowiednikiem w Objective-C jest drawTextInRect: i drawPlaceholderInRect:.

Moje rozwiązanie polegało na podklasie i przesunięciu źle wyrównanych elementów. Niestety problem wydaje się być związany z samym plikiem czcionek i sposobem, w jaki wpływa na niego tryb edycji, a także z tym, jak iOS renderuje statyczny tekst.

Mam nadzieję, że to komuś pomaga.

Allison

public class MyTextField : UITextField 
{ 
    public MyTextField(RectangleF rect) : base(rect) 
    { 
    } 

    public override void DrawPlaceholder(RectangleF rect) 
    { 
     base.DrawPlaceholder(new RectangleF(rect.X, rect.Y + 2, rect.Width, rect.Height)); 
    } 

    public override void DrawText(RectangleF rect) 
    { 
     base.DrawText(new RectangleF(rect.X, rect.Y + 2, rect.Width, rect.Height)); 
    } 
} 
Powiązane problemy