美文网首页iOS Dev
iOS 使用UISearchController所遇到的坑

iOS 使用UISearchController所遇到的坑

作者: ErHu丶 | 来源:发表于2017-03-07 11:03 被阅读9432次

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

    相关文章

      网友评论

        本文标题:iOS 使用UISearchController所遇到的坑

        本文链接:https://www.haomeiwen.com/subject/fgmmsttx.html