美文网首页iOS开发技巧
如何修改UISearchBar中 TextField的高度

如何修改UISearchBar中 TextField的高度

作者: JiangDaDaaa | 来源:发表于2020-08-12 18:34 被阅读0次

    环境配置:

    Xcode 11.5
    iOS 13

    由于工程内需要修改SearchBar内,Field高度,在网上挺多已经用不上的了。于是的在此记录一下修改frame的艰辛过程。

    1.怎么获取UISearchTextField

    如果你在iOS 13, 那很恭喜你,苹果已经直接放出了这个东东给你了,但是为了兼容iOS 13 以下的版本,你还是需要做一点点事情的.

    @interface SearchView () 
    
    @property (nonatomic, strong) UISearchBar *searchBar;
    
    @property (nonatomic, strong) UITextField *searchTextField;
    
    @end
    
    - (void)layoutSubviews {
        
        if(!self.searchTextField) {
            if (@available(iOS 13, *)) {
                self.searchTextField = self.searchBar.searchTextField;
            } else {
                [self getSearchField:self.searchBar];
            }
        }
        // [self setSearchFieldHeight:44];
    }
    
    /// 递归遍历获取_searchTextField
    - (void)getSearchField:(UIView *)view {
        for (UIView *subView in view.subviews) {
            if ([subView isKindOfClass:[UITextField class]]) {
                _searchTextField = (UITextField *)subView;
                break;;
            }
            [self getSearchField:subView];
        }
    }
    

    为什么要再layoutSubViews 里面获取呢~

    笔者在测试的时候,发现刚初始化出来的searchBar,是没有这个textField这个玩意的,于是只能在这里获取啦

    2.怎么修改Frame

    正常人呢第一反应始当然是直接修改frame啦,不过很遗憾,这是不行的
    找了很久之后,发现了一篇文章,这里告诉我需要修改他的背景图片.发现还是很好用的,于是就根据这个方法做修改了!

    - (void)setSearchFieldHeight:(CGFloat)height {
        [_searchBar setSearchFieldBackgroundImage:[self getFieldBg:height] forState:UIControlStateNormal];
        // 有部分时候这一句是需要加上去的,大家根据情况添加
        // self.searchTextField.frame = CGRectMake(0, 0, self.searchTextField.bc_width, height);
    }
    
    /// 画一个带圆角的,扩大的背景图
    - (UIImage *)getFieldBg:(CGFloat)height {
        CGRect rect = CGRectMake(0, 0, self.searchTextField.bc_width, height);
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0);
        
        UIBezierPath *bez = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:22];
        bez.lineWidth = 0.5;
        UIColor *strokeColor = [UIColor r:237 g:237 b:237];
        [strokeColor set];
        [bez fill];
        [bez stroke];
        UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return img;
    }
    

    系统样式

    系统样式

    定制样式

    定制样式

    结语

    这只是其中一种定制样式,你也可以自定义各种不同的样式
    (吐槽:搞这么多好像还不如用UITextField自己封装)

    相关文章

      网友评论

        本文标题:如何修改UISearchBar中 TextField的高度

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