25

iOS 7 で UISearchBar のフォント サイズとフォント スタイルを変更するにはどうすればよいですか?

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

iOS 6 で動作するが、iOS 7 でクラッシュする

4

9 に答える 9

67

これを試してみてください。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],
      }];

    }
于 2013-10-03T14:23:09.470 に答える
6

iOS 10 スウィフト 3:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSFontAttributeName:UIFont(name: "Avenir-Heavy", size: 22)!]
于 2017-01-30T11:15:10.427 に答える
2

appearanceWhenContainedIn:iOS9 で非推奨になった場合は、次を使用します。

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setDefaultTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"FontName" size:14]}];
于 2016-08-21T10:06:43.327 に答える
1

rmaddyが言ったように、標準 UI コンポーネントのプライベート サブビュー構造に依存するべきではありません。そのようなものが変更され、コードが壊れます。これを行うには、提供されている 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

于 2013-10-03T14:19:06.983 に答える