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

Изменение размера шрифта и стиля шрифта UISearchBar iOS 7

Как изменить размер шрифта и стиль шрифта UISearchBar в iOS 7?

UITextField *textField = [[searchBar subviews] objectAtIndex:1];
[textField setFont:[UIFont fontWithName:@"Helvetica" size:20]];

Работа в iOS 6, но он становится аварийным в iOS 7

4b9b3361

Ответ 1

Попробуйте это, It Work Fine для iOS 5.0 и выше: (iOS 7 также)

- (void)viewDidLoad
{

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setFont:[UIFont fontWithName:@"Helvetica" size:20]];

}

Для iOS 8

- (void)viewDidLoad
    {

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
            NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:20],
      }];

    }

Ответ 2

Принятый ответ не работал у меня на iOS 7.1. Мне пришлось изменить его на это:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
            NSFontAttributeName: [UIFont fontWithName:@"Avenir-Heavy" size:20.],
}];

Ответ 3

iOS 10 Swift 3:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSFontAttributeName:UIFont(name: "Avenir-Heavy", size: 22)!]

Ответ 4

appearanceWhenContainedIn: устарел в iOS9, используйте следующее:

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setDefaultTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"FontName" size:14]}];

Ответ 5

Как сказано в rmaddy, вы не должны полагаться на структуру частного подчинения стандартного компонента пользовательского интерфейса. Этот материал меняется и делает ваш код нарушенным. Вы должны использовать предоставленные API для этого.

Я думаю, что безопасный подход:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setFont:[UIFont systemFontOfSize:14]];

или вы также можете использовать этот пример кода:

for(UIView *subView in searchBar.subviews) {
    if ([subView isKindOfClass:[UITextField class]]) {
        UITextField *searchField = (UITextField *)subView;
        searchField.font = [UIFont systemFontOfSize:14];
    }
}

Вышеприведенный код также более безопасен (по крайней мере, по сравнению с тем, который указан в Вопросе), поскольку он не использует индекс subviews.

Ответ 6

Для тех, кто ищет рабочую версию Swift, Я адаптировал этот ответ. В настоящее время Swift не поддерживает методы objc varargs, поэтому он не работает напрямую с указанными выше методами. Мы можем обойти это, создав категорию objective-c, которая не использует varargs и вызывает то, что нам нужно:

// UIAppearance+Swift.h
@interface UIView (UIViewAppearance_Swift)
// appearanceWhenContainedIn: is not available in Swift. This fixes that.
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass;
@end

-

// UIAppearance+Swift.m
@implementation UIView (UIViewAppearance_Swift)
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass {
    return [self appearanceWhenContainedIn:containerClass, nil];
}
@end

Просто не забудьте #import "UIAppearance+Swift.h" в заголовке моста.

Затем просто позвоните:

UITextField.my_appearanceWhenContainedIn(UISearchBar.self).font = UIFont.systemFontOfSize(14.0)

Ответ 7

Для Swift 4 вам нужно ссылаться на NSAttributedStringKey enum:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])
        .defaultTextAttributes = [NSAttributedStringKey.font.rawValue: UIFont(...)]

Ответ 8

  • СВИФТ
  • IOS 8

Для меня это работало с использованием рекурсивной функции для поиска фактического текстового поля.

extension UIView {

func recursive_applyTheme_Search(
    #dynamicTextStyle: NSString,
    bgColor: UIColor,
    cursorColor: UIColor,
    textColor: UIColor,
    placeholderTextColor: UIColor,
    borderColor: UIColor,
    borderWidth: CGFloat,
    cornerRadius: CGFloat) {

    for subview in self.subviews
    {
        if subview is UITextField {

            (subview as! UITextField).applyThemeForSearchBar(
                dynamicTextStyle: dynamicTextStyle,
                bgColor: bgColor,
                cursorColor: cursorColor,
                textColor: textColor,
                placeholderTextColor: placeholderTextColor,
                borderColor: borderColor,
                borderWidth: borderWidth,
                cornerRadius: cornerRadius)
        }
        else { subview.recursive_applyTheme_Search(
                dynamicTextStyle: dynamicTextStyle,
                bgColor: bgColor,
                cursorColor: cursorColor,
                textColor: textColor,
                placeholderTextColor: placeholderTextColor,
                borderColor: borderColor,
                borderWidth: borderWidth,
                cornerRadius: cornerRadius) }
    }

}
}

Ответ 9

В Свифт 5

Код @Piotr Tomasik все еще работает в Swift 5 после битовых изменений

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.font:UIFont(name: "poppins", size: 13)!]