我的应用程序可用于iOS 9或更高版本的设备,我使用UISearchController对于搜索功能,我发现了很多问题,特别是UI问题,我花了很多时间,但仍然有一些问题我无法解决。下面的代码显示了我如何使用searchController在视图控制器中。
if #available(iOS 11, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
view.addSubview(searchController.searchBar)
addButton.frame = CGRect(x: 0, y: 0, width: 22, height: 22)
}
我在子类中配置它,下面是我如何配置它的主要代码。
func configSearchController() {
definesPresentationContext = true
searchBar.setImage(R.image.searchBar_search(), for: .search, state: .normal)
if #available(iOS 11, *) {
} else {
searchBar.setBackgroundImage(whiteBgImage, for: .any, barMetrics: .default)
searchBar.setSearchFieldBackgroundImage(searchFieldBackgroundImage(), for: .normal)
searchBar.frame = CGRect(x: 0,y: 0,width: UIScreen.main.bounds.width,height: 50)
}
var sf : UITextField?
if #available(iOS 13, *) {
sf = searchBar.value(forKey: "_searchTextField") as? UITextField
} else {
sf = searchBar.value(forKey: "_searchField") as? UITextField
}
if let searchField = sf {
searchField.font = UIFont.systemFont(ofSize: 16)
searchField.textColor = UIColor.init(red: 49/255.0, green: 58/255.0, blue: 68/255.0, alpha: 1)
let atrString = NSAttributedString(string: placeHolder ?? "",
attributes: [.foregroundColor : UIColor.init(red: 157/255.0, green: 162/255.0, blue: 166/255.0, alpha: 1),
.font : UIFont.systemFont(ofSize: 16)])
searchField.attributedPlaceholder = atrString
searchField.layer.cornerRadius = 18
searchField.layer.masksToBounds = true
searchField.clipsToBounds = true
let imgView = searchField.leftView as? UIImageView
var frame = imgView?.frame
frame?.size.width = 16
frame?.size.height = 16
imgView?.frame = frame ?? CGRect.init(x: 0, y: 0, width: 16, height: 16)
}
searchBar.setPositionAdjustment(UIOffset.init(horizontal: 10, vertical: 0), for: .search)
if #available(iOS 9.1, *) {
obscuresBackgroundDuringPresentation = false
} else {
dimsBackgroundDuringPresentation = false
}
searchBar.backgroundColor = UIColor.white
}
基于iOS 13和iOS 12的UISearchController以下是调试视图层次结构的屏幕截图。我打印某些ui元素的属性。<UISearchBar: 0x7fcd75c6ff40; frame = (0 44; 375 52),<UISearchBarTextField: 0x7fcd760d8000; frame = (16 1; 343 36)...问题是我不能改变UISearchBar和SearchTextField,我也不能改变我的立场UISearchTextFiled在……里面UISearchBar它总是在顶端。
在iOS 11&12上,在UISearchBar不知道怎么摆脱它。iOS 12搜索栏底线
在iOS 12上,我推一个viewController和searchController,它以奇怪的UI出现,searchController自上而下都有一个动画,所以搜索栏和ViewController之间会有一个空白,直到动画结束。出现带有搜索控制器的iOS 12视图控制器但在iOS 13上,UI被更改,在搜索栏和viewController之间留下一个中断的UI,如下所示iOS 13搜索控制器中断UI
还有其他一些问题,比如在iOS 10上,UISearchBar比iOS 11或更高版本要宽,它的高度不是52,而是44。 我用UISearchController因为它有流畅的动画和良好的封装,但我不知道它在不同的操作系统上有这么多奇怪的行为。谁能告诉我如何解决这些问题,或者我应该放弃,自己定制搜索栏。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。