環(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自己封裝)