我想知道如何将UISearchBar从默认的圆形曲线更改为矩形。
答案 0 :(得分:19)
for (UIView *searchBarSubview in [mySearchBar subviews]) {
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
[(UITextField *)searchBarSubview setBorderStyle:UITextBorderStyleRoundedRect];
}
@catch (NSException * e) {
// ignore exception
}
}
}
Swift 4:
mySearchBar.subviews().forEach { searchBarSubview in
if searchBarSubview is UITextInputTraits {
do {
(searchBarSubview as? UITextField)?.borderStyle = .roundedRect
} catch {
// ignore exception
}
}
}
答案 1 :(得分:2)
简单地为TextField添加背景图像,左视图和右视图。
以下示例
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 10., nameField.bounds.size.height)];
nameField.leftView = leftView;
nameField.leftViewMode = UITextFieldViewModeAlways;
leftView release];
答案 2 :(得分:2)
UISearchBar有圆形曲线,如果你想使它成为矩形就可以修复你必须使用带有矩形图像的自定义搜索栏,如搜索栏和1 uibutton和UItextfield,以及你自己的搜索逻辑
答案 3 :(得分:2)
我认为好多了:
UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.borderStyle = UITextBorderStyleNone;
答案 4 :(得分:1)
我会使用UIView
,具有以下功能:
- 设置框架
- 在您的班级中导入CoreGraphics
- 设置视图的白色背景
- 设置view.layer.cornerRadius=10;
- 设置view.layer.borderWidth=8;
- 设置view.layer.borderColor=[UIColor blackColor].CGColor;
- 在创建的视图内插入标签(背景清晰)
对于左侧的按钮,我将使用uiimage,右侧按钮组textField.clearButtonMode= UITextFieldViewModeAlways;
希望这有帮助。
答案 5 :(得分:1)
在目标图像中,我没有看到默认阴影,所以我要提到将背景属性设置为nil将删除它。我需要在我的项目中执行此操作并删除图像并操作边框效果很好。我必须将控件转换为 background 属性。
UITextField * x = (UITextField*)searchBarSubview;
x.background = nil;
@Keller感谢您寻找控件的提示。
答案 6 :(得分:1)
为什么不使用UIAppearance
协议?
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setBorderStyle:UITextBorderStyleRoundedRect];
答案 7 :(得分:0)
在我们之前的项目中,我们也试图以这种方式实现,但不可能进行定制。
答案 8 :(得分:0)
你可以尝试一下。
for (UIView *searchBarSubview in [search_bar subviews]) {
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
if([searchBarSubview isKindOfClass:[UITextField class]])
{
[(UITextField *)searchBarSubview setBorderStyle:UITextBorderStyleRoundedRect];
}
}
}
答案 9 :(得分:0)
我最近也通过遍历UISearchBar对象的子视图在项目中实现了这一点。但是,文本字段并不是接受的答案建议的直接子项,而是另一个子视图的子视图。内部视图层次结构可能在某些时候发生了变化。 (SDK 8.4)
+ (void)setSearchBar:(UISearchBar *)searchBar cornerRadius:(CGFloat)radius {
//set searchbar corner radius
for(UIView *possibleSearchBarTextFieldSuperview in [searchBar subviews]) {
if([[possibleSearchBarTextFieldSuperview subviews] count] > 0) {
for(UIView *possibleInnerSearchBarTextField in [possibleSearchBarTextFieldSuperview subviews]) {
if([possibleInnerSearchBarTextField conformsToProtocol:@protocol(UITextInputTraits)]) {
possibleInnerSearchBarTextField.layer.cornerRadius = radius;
possibleInnerSearchBarTextField.layer.masksToBounds = YES;
return;
}
}
}
}
}
此方法不使用任何未记录的方法,因此它可能是App Store安全的,但它很容易停止使用SDK的未来更改。
答案 10 :(得分:0)
Swift 3
let textFieldInsideUISearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideUISearchBar?.borderStyle = .none
textFieldInsideUISearchBar?.backgroundColor = UIColor.white
答案 11 :(得分:0)
它在Swift 4上与我合作的方式是将UISearchBar子类化,并在那里进行必要的调整,而没有任何黑客手段或解决方法... 我已经使用了tutorial中使用的Subclass,它的工作原理就像魅力
这是所使用示例中的代码
lipo -archs