pan*_*kaj 46 objective-c uisearchbar uifont ios
如何更改字体大小UISearchBar?
编辑:
答案
for(int i =0; i<[searchbar.subviews count]; i++) {
if([[searchbar.subviews objectAtIndex:i] isKindOfClass:[UITextField class]])
[(UITextField*)[searchbar.subviews objectAtIndex:i] setFont:[UIFont fontWithName:@"Helvetica" size:12]];
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Pankaj
jos*_*new 157
我建议iOS 5.0及更高版本有不同的选择:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setFont:[UIFont systemFontOfSize:14]];
Run Code Online (Sandbox Code Playgroud)
适用于iOS 8(由Mike Gledhill链接):
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:20],
}];
Run Code Online (Sandbox Code Playgroud)
适用于iOS 9及更高版本:
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setDefaultTextAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:20]}];
Run Code Online (Sandbox Code Playgroud)
这样,您就不需要为应用中的每个搜索栏枚举子视图.
Gav*_*ler 19
执行此操作的安全方法如下:
for(UIView *subView in searchBar.subviews) {
if ([subView isKindOfClass:[UITextField class]]) {
UITextField *searchField = (UITextField *)subView;
searchField.font = [UIFont fontWithName:@"Oswald" size:11];
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这比接受的答案更安全?因为它不依赖于UITextField的索引保持不变.(它也是循环清洁器)
Bru*_*ues 16
UISearchBar里面有一个UITextField,但没有属性可以访问它.所以,没有办法以标准的方式做到这一点.
但是有一种非标准的解决方法.UISearchBar继承自UIView,您可以使用[searchBar subviews]访问它的子视图.如果您在控制台中打印它的子视图,您将看到它具有这些视图.
UISearchBarBackground,UISearchBarTextField.
因此,要更改字体大小,您只需要这样做
UITextField *textField = [[searchBar subviews] objectAtIndex:1];
[textField setFont:[UIFont fontWithName:@"Helvetica" size:40]];
Run Code Online (Sandbox Code Playgroud)
但是,如果UISearchBar在将来发生变化且文本字段不再位于位置1,则程序将崩溃,因此最好通过子视图检查UITextField的位置,然后设置字体大小.
Ris*_*shi 15
接受的答案不是UISearchBar应用字体的推荐方法.最好避免这种方法,并使用@rafalkitta或@josema提供的答案.
但要小心,这将通过应用程序应用于所有搜索栏.为了将此方法应用于特定搜索栏:创建一个子类UISearchBar并defaultTextAttributes在UITextField下面设置类似
Swift4:
let defaultTextAttribs = [NSAttributedStringKey.font.rawValue: UIFont.boldSystemFont(ofSize: 21.0), NSAttributedStringKey.foregroundColor.rawValue:UIColor.red]
UITextField.appearance(whenContainedInInstancesOf: [CustomSearchBar.self]).defaultTextAttributes = defaultTextAttribs
Run Code Online (Sandbox Code Playgroud)
OBJ-C(iOS11)
UIFont *font = [UIFont boldSystemFontOfSize:21.0];
UIColor *color = [UIColor redColor];
NSDictionary * defaultTextAttribs = @{NSFontAttributeName:font, NSForegroundColorAttributeName: color};
[UITextField appearanceWhenContainedInInstancesOfClasses:@[[CustomSearchBar class]]].defaultTextAttributes = defaultTextAttribs;
Run Code Online (Sandbox Code Playgroud)
Adr*_*oni 12
您可以使用KVC(键值编码)来获取文本字段
UITextField *textField = [self.searchBar valueForKey: @"_searchField"];
[textField setTextColor:[UIColor redColor]];
[textField setFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:17.0]];
Run Code Online (Sandbox Code Playgroud)
Cip*_*rau 11
在swift 2.0中,以编程方式创建的搜索栏可以执行以下操作:
override func layoutSubviews() {
super.layoutSubviews()
let textFieldInsideSearchBar = self.searchBar.valueForKey("searchField") as! UITextField
textFieldInsideSearchBar.font = UIFont.systemFontOfSize(20)
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将代码放在UIView子类中,但它也可以在其他地方工作(即来自UIViewController的viewWillAppear)
在swift 3中,您可以通过以下方式实现此目的:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = UIFont(name: "AvenirNextCondensed-Regular", size: 17.0)
Run Code Online (Sandbox Code Playgroud)
UITextField外观不适用于UISearchBar以编程方式创建的s.您必须使用递归的解决方法
- (void)viewDidLoad {
[super viewDidLoad];
[self recursivelySkinTextField:self.searchBar];
}
- (void)recursivelySkinTextField:(UIView *)view {
if (!view.subviews.count) return;
for (UIView *subview in view.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
UITextField *searchField = (UITextField *)subview;
searchField.font = [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] font];
searchField.textColor = [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] textColor];
}
[self recursivelySkinTextField:subview];
}
}
Run Code Online (Sandbox Code Playgroud)
您不应该像其他答案一样使用私有API。如果要在整个应用程序中自定义搜索栏,则可以使用类的外观代理。它允许修改搜索栏的文本属性,占位符属性,取消按钮,文本字段背景图像,背景图像等。使用示例:
if #available(iOS 9.0, *) {
let searchBarTextAttributes = [
NSFontAttributeName: UIFont.boldSystemFont(ofSize: 12),
NSForegroundColorAttributeName: UIColor.red
]
// Default attributes for search text
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = searchBarTextAttributes
// Attributed placeholder string
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "Search...", attributes: searchBarTextAttributes)
// Search bar cancel button
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(searchBarTextAttributes, for: .normal)
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "Cancel"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34574 次 |
| 最近记录: |