iOS 使用UISearchController所遇到的坑
首先记录下设置SearchBar样式的一些方法:
更改背景颜色:
_searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
_searchController.searchBar.backgroundImage = [UIImage imageWithColor:[UIColor grayColor] size:CGSizeMake(_searchController.searchBar.width,26)];
[_searchController.searchBar setSearchFieldBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor] size:CGSizeMake(ScreenWidth-14,26)] forState:UIControlStateNormal];
样式如下:
更改光标偏移量:
UIOffset offset = {10.0,0};
_searchController.searchBar.searchTextPositionAdjustment = offset;
其他设置:
_searchController.searchBar.autocorrectionType = UITextAutocorrectionTypeNo;//关闭自动提示
_searchController.searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;//关闭自动首字母大写
在说下我在使用UISearchConroller中所遇到的坑已经解决方法
PS:UISearchConroller真的很坑,还不如UISearchDisplayController(iOS8 已废弃)
首先效果图要求:
说下我做的思路:官方账号人始终存在,所以我把SearchController.SearchBar和官方账号这个人的UI一起作为TableViewHeadView. 其次,点击搜索框时要求隐藏NavigationController,所以我设置了_searchController.hidesNavigationBarDuringPresentation =YES;
那么问题来了:
SearchBar坐标偏移不管我怎么设置SearchBar的Frame都无用, 要么SearchBar被切,要么坐标不对
解决方法:
任何地方都不设置SearchBar的Frame,在SearchBar.placeholder 赋值后:
[_searchController.searchBar sizeToFit];
然后这句很关键:
我在viewDidLoad中设置:
self.definesPresentationContext = YES; // know where you want UISearchController to be displayed
使用后效果:
SearchBar坐标对了,但是发现遮住了TableView内容我尝试在SearchController代理方法中修改TableView.frame 但是无用.
解决方法:
-(void)viewDidLayoutSubviews {
if(self.searchController.active) {
[self.tableView setFrame:CGRectMake(0,20,ScreenWidth,self.view.height -20)];
}else{
self.tableView.frame =self.view.bounds;
}
}
效果:
适配完成,没有问题其他:
另外说下灰色蒙版的问题:
我尝试使用:
_searchController.dimsBackgroundDuringPresentation = YES;
来达到蒙版效果,可发现会导致SearchBar的背景颜色在SearchControlle.active = NO的时候改变.于是打算自己写个蒙版加上去.
如果带SearchController的页面是present模态过去的, 请不要设置SearchControlle.active = NO,设置为NO会导致该页面被dismiss,可能是SearchController内部的dismiss影响了....
另外:
我写了一个Demo可以供大家参考下,有问题可以留言探讨