Текст закладок, смещенный в UITextField UISearchBar - программирование
Подтвердить что ты не робот

Текст закладок, смещенный в UITextField UISearchBar

Я пытаюсь настроить шрифт UISearchBar через внешний прокси. Он работает, но каким-то образом текст заполнителя не центрирован по вертикали. Я попытался установить свойство вертикального выравнивания; текст заполнителя будет центрирован, но введенный текст будет немного ниже центральной линии... Есть ли способ исправить это?

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

[[UITextField appearanceWhenContainedIn: [UISearchBar class], nil]
                                setFont: [UIFont customFontWithSize: 17]];

placeholder text

normal text

4b9b3361

Ответ 1

Всякий раз, когда это происходит со мной, это обычно вызвано некоторой модификацией UIAppearance, не хорошо сочетающейся с UISearchBar. Посмотрите на любые предыдущие хаки, которые вы, возможно, сделали, и, возможно, попробуйте прокомментировать их по одному.

В моем конкретном случае это была фактически модификация NSForegroundColor в текстовом атрибуте, поэтому это несоосность может быть не связано с изменением шрифта.

Ответ 2

Вам нужно установить выравнивание textField внутри searchBar. Получите textField из подзонов панели UISearch и просто установите его выравнивание по центру. Попробуйте пример кода ниже.

- (void)viewDidLoad
{
    for (UITextField *txt in _searchbar.subviews) {
        if ([txt isKindOfClass:[UITextField class]]) {
            [txt setTextAlignment:NSTextAlignmentCenter];
        }
    }
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

здесь _searchbar - это выход из UISearchBar.

Ответ 3

- (void)viewDidLoad
{

    for (UITextField *txt in search.subviews) {
        if ([txt isKindOfClass:[UITextField class]]) {
            txt.font = [UIFont fontWithName:@"Arial-BoldMT" size:17];
            txt.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
        }
    }

    [super viewDidLoad];

}

Попробуйте этот код один раз.