2015-02-23 29 views
8

Aktualnie nie jestem w stanie wyrównać w pionie obiektu attributPlaceholder w UITextField i nie mam pojęcia dlaczego.Wyśrodkowanie w pionie przypisanego do UITextFieldPlaceholder

Oto co robię:

self.addressBar = [[UITextField alloc] initWithFrame: CGRectMake(...)]; 
self.addressBar.backgroundColor = [UIColor whiteColor]; 
self.addressBar.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Placeholder text" 
           attributes:@{ 
              NSForegroundColorAttributeName: [UIColor colorWithRed:79/255.0f green:79/255.0f blue:79/255.0f alpha:0.5f], 
              NSFontAttributeName : [UIFont fontWithName:@"Gotham-BookItalic" size:14.0], 
              } 
]; 
self.addressBar.delegate = self; 
self.addressBar.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
[self.view addSubview:self.addressBar]; 

A oto co się dzieje:

The UITextFieldLabel is smaller than its parent

Jest dość oczywiste, że to się dzieje, ze względu na fakt, że wysokość tego UITextFieldLabel jest 10px mniejszy niż Sam UItextField, ale nie mogę tego zmienić.

Dzieje się tak tylko za pomocą obiektu attributPlaceholder; domyślna właściwość zastępcza działa dobrze.

Wszelkie pomysły?

+0

Domyślny element zastępczy ma taki sam rozmiar czcionki, jak czcionka pola tekstowego. Dlatego jest wyśrodkowany. – kean

+0

OK ma sens, ale czy nie ma innego sposobu na wyśrodkowanie elementu zastępczego przy zachowaniu tego rozmiaru czcionki? –

Odpowiedz

14

Zastosowanie NSParagraphStyle zwiększyć minimalną wysokość linia:

NSMutableParagraphStyle *style = [self.addressBar.defaultTextAttributes[NSParagraphStyleAttributeName] mutableCopy]; 
style.minimumLineHeight = self.addressBar.font.lineHeight - (self.addressBar.font.lineHeight - [UIFont fontWithName:@"Gotham-BookItalic" size:14.0].lineHeight)/2.0; 

self.addressBar.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Placeholder text" 
          attributes:@{ 
             NSForegroundColorAttributeName: [UIColor colorWithRed:79/255.0f green:79/255.0f blue:79/255.0f alpha:0.5f], 
             NSFontAttributeName : [UIFont fontWithName:@"Gotham-BookItalic" size:14.0], 
             NSParagraphStyleAttributeName : style 
             } 
]; 

Można również zastąpić metodę - (CGRect)placeholderRectForBounds:(CGRect)bounds; w UITextField podklasy.

Jest brudny, ale działa :)

+1

Idealnie! Dzięki :) Przyznam ci nagrodę jak tylko będę mógł (15 godzin od teraz) –

+0

Wszystko gotowe. Dzięki jeszcze raz –

2

zastępczy nie zostaną wyrównane, jeśli czcionka Twojego textField za tekst jest inny niż czcionki textField za symbol zastępczy jest. Upewnij się, że obie czcionki są takie same, jeśli chcesz odpowiednio wyrównać lub możesz podążać za odpowiedzią Kean.

textField.font = [UIFont fontWithName:@"HelveticaNeue" size:12]; 
    textField.attributedPlaceholder = 
    [[NSAttributedString alloc] initWithString:@"Enter fruit/vegetable name" 
                      attributes:@{ 
                          NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:12.0] 
                         } 
    ]; 
1

Jeśli używasz attributedPlaceholder, upewnij się, aby ustawić czcionkę textField być tej samej czcionki, korzystając w attributedString.

Powiązane problemy