Текст-заполнитель не ориентирован на UITextField, созданный программно
Я создаю UITextField программно и помещаю его в UIView. Размер шрифта равен 15.0f (системный шрифт). Но замещающий объект не находится в текстовом представлении. Кто-нибудь знает, как это решить?
Я нашел некоторые ссылки на SO для размытого текста и т.д. и попытался установить фрейм текстового поля с целыми значениями, но это не имеет значения.
UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(5.0f, 6.0f, 278.0f, 32.0f)];
[txtField setPlaceholder:@"My placeholder"];
[txtField setFont:[UIFont systemFontOfSize:15.0]];
[txtField setBorderStyle:UITextBorderStyleRoundedRect];
[txtField setAutocorrectionType:UITextAutocorrectionTypeNo];
[txtField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
[txtField setKeyboardType:UIKeyboardTypeEmailAddress];
[txtField setReturnKeyType:UIReturnKeyDone];
[txtField setClearButtonMode:UITextFieldViewModeWhileEditing];
Спасибо за любую помощь
Примечание. Я имею в виду, что текст не центрирован по вертикали в текстовом поле (он немного ближе к вершине). Поэтому настройка выравнивания текста не является решением.
Добавление изображения проблемы для пояснения - как видно на изображении, текст заполнителя больше относится к вершине, а не по центру по вертикали.
![alt text]()
Ответы
Ответ 1
Вам нужно добавить:
txtField.textAlignment = NSTextAlignmentCenter; // Pre-iOS6 SDK: UITextAlignmentCenter
Имейте в виду, что это регулирует как выравнивание текста-заполнителя, так и текст, который вводит пользователь.
Как центрировать по вертикали
Поскольку исходный вопрос был обновлен, чтобы запросить, как вертикально выравнивать текст заполнителя и что ответ похож на комментарии, вот как это сделать:
txtField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
Ответ 2
Это не работает на 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, так и для более ранних версий.
Ответ 3
Я использовал только цвет, но нам также нужно установить шрифт.
Это работало для меня:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:
@{
NSForegroundColorAttributeName:[UIColor whiteColor],
NSFontAttributeName: [UIFont systemFontOfSize:12]
}];
Ответ 4
Изменение минимальной высоты линии с помощью 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
}];