今天在做UISearchController的优化时,遇到了以下问题,在此记录一下。
1.设置cancleButton,输入框等颜色
// 设置显示取消按钮
searchController.searchBar.showsCancelButton = true
在代理方法中更改按钮颜色
func updateSearchResults(for searchController: UISearchController) {
// 修改取消按钮文字颜色
if let searchBarSubView = searchController.searchBar.subviews.first {
for subView in searchBarSubView.subviews {
if subView.isKind(of: UIButton.classForCoder()) {
let cancleButton = subView as! UIButton
cancleButton.setTitleColor(UIColor.white, for: .normal)
}
}
}
}
2.searchBar多出的边框线
设置searchBar.barTintColor改变searchBar的背景颜色后,会发现searchBar顶部和底部会有两条初始颜色的线条。这里有两种方法解决:
1.设置searchBarStyle, searchContrl.searchBar.searchBarStyle = .minimal。searchBarStyle共有3种系统样式。
default: 默认样式
prominent:search bar的背景是半透明的,输入框是不透明的
minimal:search bar没有默认的背景,输入框是半透明的
具体看官方文档。
2.设置backgroundImage,给backgroundImage设置一个空的图片,这里需要注意的是,必须将isTranslucent设置false,否则,设置的barTintColor无法显示出来
searchController.searchBar.setBackgroundImage(UIImage.init(), for: UIBarPosition.any, barMetrics: UIBarMetrics.default)
searchController.searchBar.isTranslucent = false
3.改变输入框的高度
默认系统不提供改变输入框的高度的API,通过实验,尝试通过遍历子视图改变高度的想法失败,最后找到通过设置输入框的背景图片可以达到输入框显示可是高度改变的效果。
这里先生成一张输入框背景颜色的图片,宽度大于0,高度为输入框理想高度,设置searchFieldBackgroundImage,OK,搞定。使用请注意,此处极少情况下会出现searchBar消失的现象,原因未明。设置后输入框变成方形,这里在绘制图片时,可以先设置圆角,已达到输入框圆角的效果。
// 调整输入框高度, 宽度可以设置大于0的任意值,高度为输入框显示高度
let image = self.searchFieldImage(CGSize.init(width: 100, height: 30))
// image = image?.resizableImage(withCapInsets: UIEdgeInsets.init(top: 0, left: 45, bottom: 0, right: 45), resizingMode: UIImageResizingMode.stretch)
searchContrl.searchBar.setSearchFieldBackgroundImage(image, for: .normal)
生成图片方法:
func searchFieldImage(_ size: CGSize) -> UIImage? {
UIGraphicsBeginImageContext(size)
UIColor.white.setFill()
UIRectFill(CGRect.init(origin: CGPoint.zero, size: size))
// 圆角效果
// let path = UIBezierPath.init(roundedRect: CGRect.init(origin: CGPoint.zero, size: size), cornerRadius: size.height / 2)
// path.fill()
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
网友评论