Текст заполнителя не центрирован для UITextField, созданного программно - PullRequest
44 голосов
/ 08 сентября 2010

Я создаю UITextField программно и помещаю его в UIView.Размер шрифта установлен на 15.0f (системный шрифт).Но отображаемый заполнитель не центрирован в текстовом представлении.Кто-нибудь знает, как решить эту проблему?

Я нашел несколько ссылок на SO для размытого текста и т. Д. И попытался задать рамку текстового поля с целочисленными значениями, но это не имеет значения.help

Примечание. Я имею в виду, что текст не центрируется по вертикали в текстовом поле (немного вверх).Поэтому настройка выравнивания текста не является решением.

Добавление изображения вопроса для пояснения - как видно на рисунке, текст заполнителя находится ближе к вершине, а не к центру по вертикали.alt text

Ответы [ 4 ]

56 голосов
/ 08 сентября 2010

Вам нужно добавить:

txtField.textAlignment = NSTextAlignmentCenter; // Pre-iOS6 SDK: UITextAlignmentCenter

Имейте в виду, это регулирует как выравнивание текста заполнителя, так и текста, в который будет вводить пользователь.

Как отцентрировать вертикально

Так как исходный вопрос был обновлен, чтобы запросить, как выровнять текст заполнителя по вертикали, и этот ответ скрыт в комментариях, вот как это сделать:

txtField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
18 голосов
/ 07 октября 2013

Это не работает, как ожидалось на iOS7. На iOS7 вам придется переопределить класс TextField и

- (void) drawPlaceholderInRect:(CGRect)rect

способ.

Как это:

- (void) drawPlaceholderInRect:(CGRect)rect
{
    [[UIColor blueColor] setFill];
    CGRect placeholderRect = CGRectMake(rect.origin.x, (rect.size.height- self.font.pointSize)/2, rect.size.width, self.font.pointSize);
    [[self placeholder] drawInRect:placeholderRect withFont:self.font lineBreakMode:NSLineBreakByWordWrapping alignment:self.textAlignment];
}

Работает как для iOS7, так и для более ранних версий.

2 голосов
/ 21 июля 2015

Я использовал только цвет, но нам также нужно установить шрифт.

Этот работал для меня:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:
@{
     NSForegroundColorAttributeName:[UIColor whiteColor], 
     NSFontAttributeName: [UIFont systemFontOfSize:12]
}];
0 голосов
/ 10 мая 2017

Изменение минимальной высоты строки с помощью NSParagraphStyle было единственным решением, которое сработало для меня:

    NSMutableParagraphStyle *style = [self.addressBar.defaultTextAttributes[NSParagraphStyleAttributeName] mutableCopy];
style.minimumLineHeight = self.addressBar.font.lineHeight - (self.addressBar.font.lineHeight - placeholderFont.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 : placeholderFont,
     NSParagraphStyleAttributeName : style
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...