Подтвердить что ты не робот

Текст-заполнитель не ориентирован на 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

4b9b3361

Ответ 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
}];