iOS 7 で UISearchBar のフォント サイズとフォント スタイルを変更するにはどうすればよいですか?
UITextField *textField = [[searchBar subviews] objectAtIndex:1];
[textField setFont:[UIFont fontWithName:@"Helvetica" size:20]];
iOS 6 で動作するが、iOS 7 でクラッシュする
iOS 7 で UISearchBar のフォント サイズとフォント スタイルを変更するにはどうすればよいですか?
UITextField *textField = [[searchBar subviews] objectAtIndex:1];
[textField setFont:[UIFont fontWithName:@"Helvetica" size:20]];
iOS 6 で動作するが、iOS 7 でクラッシュする
これを試してみてください。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],
}];
}
iOS 10 スウィフト 3:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSFontAttributeName:UIFont(name: "Avenir-Heavy", size: 22)!]
appearanceWhenContainedIn:
iOS9 で非推奨になった場合は、次を使用します。
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setDefaultTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"FontName" size:14]}];
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
。