IOS -UISearchController UISearchBar

来源:互联网 发布:淘宝上的算命准吗 编辑:程序博客网 时间:2024/05/17 02:48

前言

UISearchController是个坑啊,苹果为了,让开发者快速构架一块app,简化开发,私下添加太多东西,搞迷糊了。但是实际开发过程中,给的都需要重新去自定义,所以出现了很多莫名其妙的问题,究竟是不好呢,还是不好呢^_^
用UISearchController主要是为了hidesNavigationBarDuringPresentation这个属性后传来的动画效果,如果不用这个的话,我倒是很愿意直接用UISearchBar了

代码部分

实现<UISearchControllerDelegate,UISearchResultsUpdating>定义@property (nonatomic,strong) UISearchController *searchController;   //创建UISearchController    self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];    //设置代理    self.searchController.delegate= self;    self.searchController.searchResultsUpdater = self;    //包着搜索框外层的颜色    // self.searchController.searchBar.barTintColor = [UIColor lig];    // self.searchController.searchBar.tintColor = [UIColor orangeColor];    //提醒字眼    self.searchController.searchBar.placeholder= @"搜索";    //提前在搜索框内加入搜索词    self.searchController.searchBar.text = @"";    //设置UISearchController的显示属性,以下3个属性默认为YES    //搜索时,背景变暗色    self.searchController.dimsBackgroundDuringPresentation = NO;    //搜索时,背景变模糊    //  self.searchController.obscuresBackgroundDuringPresentation = YES;    //点击搜索的时候,是否隐藏导航栏    self.searchController.hidesNavigationBarDuringPresentation = YES;    //位置    [_searchController.searchBar sizeToFit];    self.tableView.tableHeaderView = self.searchController.searchBar;

searchBar样式

   //  searchbar 样式  //设置背景图是为了去掉上下黑线    self.searchController.searchBar.backgroundImage =[UIImage imageWithColor:kWhiteColor size:CGSizeMake(kMinScreenWidth, 44)];  // 设置SearchBar的颜色主题为白色    self.searchController.searchBar.barTintColor = [UIColor whiteColor];    self.searchController.searchBar.delegate = self;    UITextField *searchField = [self.searchController.searchBar valueForKey:@"searchField"];    if (searchField) {        [searchField setBackgroundColor:kColorWithHex(@"f8f8f8")];        searchField.layer.cornerRadius = 14.0f;        //        searchField.layer.borderColor = [UIColor colorWithRed:247/255.0 green:75/255.0 blue:31/255.0 alpha:1].CGColor;        //        searchField.layer.borderWidth = 1;        searchField.layer.masksToBounds = YES;    }

空搜索

   //空搜索    UITextField *searchBarTextField = nil;    NSArray *views = ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) ? self.searchController.searchBar.subviews : [[self.searchController.searchBar.subviews objectAtIndex:0] subviews];    for (UIView *subview in views)    {        if ([subview isKindOfClass:[UITextField class]])        {            searchBarTextField = (UITextField *)subview;            break;        }    }    searchBarTextField.enablesReturnKeyAutomatically = NO;    searchBarTextField.returnKeyType = UIReturnKeyDone;

重点

  1. searchController输入状态的时候,searchbar会跑到状态栏后边
    self.definesPresentationContext=YES;

2.如果把searchBar当做tableView的headerVIew的使用,在方法- (void)willPresentSearchController:(UISearchController *)searchController tableView已经reloadData了tableView.frame.y需要向下移动20个单位

  CGRect tableFrame = self.tableView.frame;        tableFrame.origin.y = 20;        tableFrame.size.height = self.view.frame.size.height -20;        self.tableView.frame = tableFrame;        [UIView animateWithDuration:0.4 animations:^{            [self.view layoutIfNeeded];            [self.tableView layoutIfNeeded];        }];

3.如果还没有需要向上移动20个单位,然后再- (void)willDismissSearchController:(UISearchController *)searchController 让tableVIew会到原始位置

4.如果进入预编辑状态,searchBar消失(UISearchController套到TabBarController可能会出现这个情况),请添加下边这句话

- (void)didPresentSearchController:(UISearchController *)searchController{    [self.view addSubview:self.searchController.searchBar];}

5.如果UISearchController进入编辑状态后,导航栏遮挡住20加上

-(void)viewDidLayoutSubviews {    if(self.searchController.active) {        self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, 20, self.searchController.searchBar.frame.size.width, 44.0);        [UIView animateWithDuration:0.1 animations:^{            [self.view layoutIfNeeded];            [self.searchController.searchBar layoutIfNeeded];        }];    }}

去掉编辑状态下方的黑线

    UISearchBar *searchBar = self.searchController.searchBar;    UIImageView *barImageView = [[[searchBar.subviews firstObject] subviews] firstObject];    barImageView.layer.borderColor = kWhiteColor.CGColor;    barImageView.layer.borderWidth = 1;

优化动态弹出效果

    self.navigationController.navigationBar.translucent = YES;

后记

不需要设置这些东西了

//    self.definesPresentationContext=YES;//    self.edgesForExtendedLayout = UIRectEdgeNone;//    self.automaticallyAdjustsScrollViewInsets = NO;

http://www.jianshu.com/p/aa9a153a5b58

原创粉丝点击