如何将UISearchBar从圆形更改为矩形?

我想知道如何将UISearchBar从默认的圆形曲线更改为矩形。

在此处输入图像描述

在此处输入图像描述

for (UIView *searchBarSubview in [mySearchBar subviews]) { if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) { @try { [(UITextField *)searchBarSubview setBorderStyle:UITextBorderStyleRoundedRect]; } @catch (NSException * e) { // ignore exception } } } 

斯威夫特4:

 mySearchBar.subviews().forEach { searchBarSubview in if searchBarSubview is UITextInputTraits { do { (searchBarSubview as? UITextField)?.borderStyle = .roundedRect } catch { // ignore exception } } } 

简单地为TextField添加背景图像,左视图和右视图。

以下示例

 UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 10., nameField.bounds.size.height)]; nameField.leftView = leftView; nameField.leftViewMode = UITextFieldViewModeAlways; leftView release]; 

UISearchBar有圆形曲线,如果你想使它成为矩形就可以修复你必须使用带有矩形图像的自定义搜索栏,如搜索栏和1 uibutton和UItextfield,以及你自己的搜索逻辑

在我看来好多了:

 UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"]; txfSearchField.borderStyle = UITextBorderStyleNone; 

在目标图像中,我没有看到默认阴影,因此我将提到将background属性设置为nil将删除它。 我需要在我的项目中执行此操作并删除图像并操作边框效果很好。 我必须转换控件才能进入后台属性。

 UITextField * x = (UITextField*)searchBarSubview; x.background = nil; 

@Keller感谢找到控件的提示。

我会使用UIView ,具有以下function:
– 设置你的框架。
– 在您的class级中导入CoreGraphics
– 设置视图的白色背景
– 设置view.layer.cornerRadius=10;
– 设置view.layer.borderWidth=8;
– 设置view.layer.borderColor=[UIColor blackColor].CGColor;
– 在创建的视图内插入标签(背景清晰)
对于左边的按钮,我会使用uiimage,右边的按钮设置为textField.clearButtonMode= UITextFieldViewModeAlways;

希望这可以帮助。

在我们之前的项目中,我们也试图以这种方式实现,但不可能进行定制。

你能试试吗?

  for (UIView *searchBarSubview in [search_bar subviews]) { if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) { if([searchBarSubview isKindOfClass:[UITextField class]]) { [(UITextField *)searchBarSubview setBorderStyle:UITextBorderStyleRoundedRect]; } } } 

我最近也通过遍历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的未来更改。

为什么不使用UIAppearance协议?

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setBorderStyle:UITextBorderStyleRoundedRect];

斯威夫特3

  let textFieldInsideUISearchBar = searchBar.value(forKey: "searchField") as? UITextField textFieldInsideUISearchBar?.borderStyle = .none textFieldInsideUISearchBar?.backgroundColor = UIColor.white