IOS -UISearchController UISearchBar

49 篇文章 0 订阅
3 篇文章 0 订阅

前言

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值