如何修改UISearchBar中 TextField的高度

環(huán)境配置:

Xcode 11.5
iOS 13

由于工程內(nèi)需要修改SearchBar內(nèi),F(xiàn)ield高度,在網(wǎng)上挺多已經(jīng)用不上的了。于是的在此記錄一下修改frame的艱辛過程。

1.怎么獲取UISearchTextField

如果你在iOS 13, 那很恭喜你,蘋果已經(jīng)直接放出了這個東東給你了,但是為了兼容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 里面獲取呢~

筆者在測試的時候,發(fā)現(xiàn)剛初始化出來的searchBar,是沒有這個textField這個玩意的,于是只能在這里獲取啦

2.怎么修改Frame

正常人呢第一反應(yīng)始當(dāng)然是直接修改frame啦,不過很遺憾,這是不行的
找了很久之后,發(fā)現(xiàn)了一篇文章,這里告訴我需要修改他的背景圖片.發(fā)現(xiàn)還是很好用的,于是就根據(jù)這個方法做修改了!

- (void)setSearchFieldHeight:(CGFloat)height {
    [_searchBar setSearchFieldBackgroundImage:[self getFieldBg:height] forState:UIControlStateNormal];
    // 有部分時候這一句是需要加上去的,大家根據(jù)情況添加
    // 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;
}

系統(tǒng)樣式

系統(tǒng)樣式

定制樣式

定制樣式

結(jié)語

這只是其中一種定制樣式,你也可以自定義各種不同的樣式
(吐槽:搞這么多好像還不如用UITextField自己封裝)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容