iOS 使用UISearchController所遇到的坑

字數 501閱讀 10775

首先记录下设置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可以供大家参考下,有问题可以留言探讨

推薦閱讀更多精彩內容