项目里需要自定 UISearchController 的高度,本来这很简单的一件事,结果折腾了不少时间,主要是设置高度时遇到了坑,目测在 OC 时并没有发现什么问题,只有在 Swift 上才发现有问题。。。这里记录下,备忘!!!
正常流程就是继承 UISearchController,然后重写 init 方法:
class JCSearchController: UISearchController {
override init(searchResultsController: UIViewController?) {
super.init(searchResultsController: searchResultsController)
_init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
_init()
}
private func _init() {
self.dimsBackgroundDuringPresentation = false
self.hidesNavigationBarDuringPresentation = true
self.searchBar.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 31)
self.searchBar.barStyle = .default
self.searchBar.backgroundColor = .white
self.searchBar.barTintColor = .white
self.searchBar.delegate = self
self.searchBar.autocapitalizationType = .none
self.searchBar.placeholder = "搜索"
self.searchBar.layer.borderColor = UIColor.white.cgColor
self.searchBar.layer.borderWidth = 1
self.searchBar.layer.masksToBounds = true
}
}
多么简单的一件事,但结果有输入时内容时,JCSearchController 的高度变大了,可以通过 searchBarTextDidEndEditing 等方式查看 searchBar 的确是变大了,但以前在 OC 上并没有这个问题,回头再研究下的,现在说下解决方法吧。
搜索了下,说可以通过 searchBarTextDidEndEditing 等方法中重新设置 searchBar 的 frame.size.height,设置后部分情况的克是可以解决的, 但点 取消 按键时,高度又不正常的,自己也思考了下,如果他的大小变化了,就一定会调用 viewDidLayoutSubviews, 还有其它情况下,同时在 viewDidDisappear 中也重新设置高度就可以,经过测试可以覆盖所有的情况了,完整的代码如下:
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
var frame = self.searchBar.frame
frame.size.height = 31
self.searchBar.frame = frame
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// 去除边黑边
self.searchBar.layer.borderColor = UIColor.white.cgColor
self.searchBar.layer.borderWidth = 1
self.searchBar.layer.masksToBounds = true
var frame = self.searchBar.frame
frame.size.height = 31
self.searchBar.frame = frame
}
这里也顺便提下如何 UISearchController 将取消按键的 “cancel” 改为中方的,网上应该有各种各样的通过subview来遍历出来取消的 button,然后再去设置title,其实如果你项目是中文的,就在info.plist里把语言(Localization native development region)设置为 China 就可以了,cancel 会自动转换成中文的取消。
关于最近
最近好久没有更新文章了,其实最近很忙,不单是工作上的,还有生活上的,母亲住院动手术了,回去老家照看,随着年龄的增长,觉得自己的责任越来越大了,慢慢觉得最害怕的一句话是:“树欲静,而风不止;子欲养,而亲不待”,只想好好珍惜当下,多陪下家人,也许只是简单的一通电话,几个小时的车程,一个周末的时间,多聊聊,多回去看下,这是家人最大的愿望了。这次回家,父亲对我说:“爸妈老了,不像年轻时了,生病的时候也希望子女能陪在身份”,那时心里真的很酸,这话是从父亲口中说出来的,真的很愧疚,回首看下,原来父母真的老了,希望我们都能多陪伴下自己的父母吧。
最近同时也写了一个 RSS 的订阅器:趣阅, 你可以在 App Store 上下载体验,这个工具主要是方便自己的使用,平常时坐公车、地铁时,只可以利用碎片时间来读读好的文章,充实下自己。目前已经更新两个版本,昨晚上提交了第三个版本,应该明天就可以审核过了,有兴趣的可以看下,如果希望一同开发的,也可以私聊我。