实现书籍搜索的功能,因为搜索框UI都会进行一些美化。
设计稿如图
211622800987_.pic.jpg 221622801193_.pic.jpg需要在系统提供的searchBar进行一些处理,比如:
-去掉搜索图标
-删除图片替换
-圆角处理
-搜索文字左侧间距微调
-光标颜色
隐藏的还有iOS13之前以及之后系统版本的searchBar适配
实现代码如下:
_searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(kMatchW(48), 5, kScreenWidth-kMatchW(118), 35)];
_searchBar.placeholder = @"请输入书名或者作者名";
_searchBar.tintColor = [UIColor YYColorWithHexString:@"#FD454A"]; //光标颜色
_searchBar.layer.cornerRadius = 17.5f; //切圆角
_searchBar.layer.masksToBounds = YES;
_searchBar.barTintColor = [UIColor YYColorWithHexString:@"#F4F4F4"];
//searchText的左边距开始 比默认的往左调整五个像素
_searchBar.searchTextPositionAdjustment = UIOffsetMake(-5, 0);
//替换系统searchBar删除的按钮图片
[_searchBar setImage:[UIImage imageNamed:@"sousuoshanchu"]forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];
//去掉线 并且要设置相应的背景
_searchBar.backgroundImage = [UIImage new];
//这个背景色一定要设置不设置的话iOS13之前的效果如下图二
_searchBar.backgroundColor = [UIColor YYColorWithHexString:@"#F4F4F4"];
//iOS13之前和之后的获取searchBar的textField的方法
UITextField * searchField;
if (kIsIOS13Later) {
searchField = [_searchBar valueForKey:@"searchField"];
}else{
searchField = [[[self.searchBar.subviews firstObject] subviews] lastObject];
}
if (searchField) {
//placeholder的一些基础设置
Ivar ivar = class_getInstanceVariable([UITextField class], "_placeholderLabel");
UILabel *placeholderLabel = object_getIvar(searchField, ivar);
placeholderLabel.textColor = [UIColor YYColorWithHexString:@"999999"];
placeholderLabel.font = [UIFont systemFont14];
//搜索的文字颜色 字号大小
searchField.backgroundColor = [UIColor YYColorWithHexString:@"#F4F4F4"];
searchField.textColor = [UIColor YYColorWithHexString:@"#333333"];
searchField.font = [UIFont systemFont14];
searchField.enablesReturnKeyAutomatically = NO; //键盘支持空搜索
searchField.leftViewMode = UITextFieldViewModeNever;
searchField.leftView = nil;
}
最终实现的正常效果,图一:
11622801876_.pic.jpg
图二:
21622801984_.pic.jpg
造成这个的原因是searchBar是两个图层了,backgroundView是一部分,searchField是一个部分,不设置searchBar的backgroundcolor那么为透明的 就只显示了searchField的颜色。
为了看得更加清楚,我把_searchBar和 searchField的颜色
_searchBar.backgroundColor = [UIColor blueColor];
searchField.backgroundColor = [UIColor redColor];
分别改成蓝色和红色,那么显示的效果如下:
31622802282_.pic.jpg
网友评论