Я также недавно достиг этого в проекте, обходя подпредставления объекта UISearchBar.Однако текстовое поле было не непосредственным ребенком, как предполагал принятый ответ, а подвидом другого подпредставления о нем.Внутренняя иерархия представления, вероятно, была изменена в какой-то момент.(SDK 8.4)
+ (void)setSearchBar:(UISearchBar *)searchBar cornerRadius:(CGFloat)radius {
//set searchbar corner radius
for(UIView *possibleSearchBarTextFieldSuperview in [searchBar subviews]) {
if([[possibleSearchBarTextFieldSuperview subviews] count] > 0) {
for(UIView *possibleInnerSearchBarTextField in [possibleSearchBarTextFieldSuperview subviews]) {
if([possibleInnerSearchBarTextField conformsToProtocol:@protocol(UITextInputTraits)]) {
possibleInnerSearchBarTextField.layer.cornerRadius = radius;
possibleInnerSearchBarTextField.layer.masksToBounds = YES;
return;
}
}
}
}
}
Этот метод не использует никаких недокументированных методов, поэтому он, вероятно, безопасен в App Store, хотя может перестать работать с будущими изменениями SDK.