美文网首页
2021-06-04 UISearchBar的系统适配问题

2021-06-04 UISearchBar的系统适配问题

作者: 牛牛大王奥利给 | 来源:发表于2021-06-07 10:23 被阅读0次
    实现书籍搜索的功能,因为搜索框UI都会进行一些美化。
    设计稿如图
    211622800987_.pic.jpg 221622801193_.pic.jpg
    需要在系统提供的searchBar进行一些处理,比如:

    -去掉搜索图标
    -删除图片替换
    -圆角处理
    -搜索文字左侧间距微调
    -光标颜色

    隐藏的还有iOS13之前以及之后系统版本的searchBar适配
    实现代码如下:
     _searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(kMatchW(48), 5, kScreenWidth-kMatchW(118), 35)];
        _searchBar.placeholder = @"请输入书名或者作者名";
        _searchBar.tintColor = [UIColor YYColorWithHexString:@"#FD454A"]; //光标颜色
        _searchBar.layer.cornerRadius = 17.5f; //切圆角
        _searchBar.layer.masksToBounds = YES;
    
        _searchBar.barTintColor = [UIColor YYColorWithHexString:@"#F4F4F4"];
    
    //searchText的左边距开始 比默认的往左调整五个像素
        _searchBar.searchTextPositionAdjustment = UIOffsetMake(-5, 0);
    
    //替换系统searchBar删除的按钮图片
        [_searchBar setImage:[UIImage imageNamed:@"sousuoshanchu"]forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];
        
        //去掉线 并且要设置相应的背景
        _searchBar.backgroundImage = [UIImage new];
    //这个背景色一定要设置不设置的话iOS13之前的效果如下图二
        _searchBar.backgroundColor = [UIColor YYColorWithHexString:@"#F4F4F4"];
    
    //iOS13之前和之后的获取searchBar的textField的方法
        UITextField * searchField;
        if (kIsIOS13Later) {
           searchField = [_searchBar valueForKey:@"searchField"];
        }else{
            searchField = [[[self.searchBar.subviews firstObject] subviews] lastObject];
        }
    
        if (searchField) {
    
    //placeholder的一些基础设置
            Ivar ivar =  class_getInstanceVariable([UITextField class], "_placeholderLabel");
            UILabel *placeholderLabel = object_getIvar(searchField, ivar);
            placeholderLabel.textColor = [UIColor YYColorWithHexString:@"999999"];
            placeholderLabel.font = [UIFont systemFont14];
    
    //搜索的文字颜色 字号大小
            searchField.backgroundColor = [UIColor YYColorWithHexString:@"#F4F4F4"];
            searchField.textColor = [UIColor YYColorWithHexString:@"#333333"];
            searchField.font = [UIFont systemFont14];
            searchField.enablesReturnKeyAutomatically = NO; //键盘支持空搜索
            searchField.leftViewMode = UITextFieldViewModeNever;
            searchField.leftView = nil;
        }
    

    最终实现的正常效果,图一:


    11622801876_.pic.jpg

    图二:


    21622801984_.pic.jpg

    造成这个的原因是searchBar是两个图层了,backgroundView是一部分,searchField是一个部分,不设置searchBar的backgroundcolor那么为透明的 就只显示了searchField的颜色。

    为了看得更加清楚,我把_searchBar和 searchField的颜色

    _searchBar.backgroundColor = [UIColor blueColor];
    searchField.backgroundColor = [UIColor redColor];
    

    分别改成蓝色和红色,那么显示的效果如下:


    31622802282_.pic.jpg
    因为隔一段时间可能就要写一个searchBar,以此记录下。

    相关文章

      网友评论

          本文标题:2021-06-04 UISearchBar的系统适配问题

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