Я пытаюсь добиться того же внешнего вида моего UISearchBar с TextField внутри него, как в моем приложении для iOS 6. Я пытался закодировать его несколькими способами, но пока не увенчался успехом. Проблема в том, что я не могу изменить фрейм TextField с iOS 7. В результате, мой TextField занимает все пространство в NavigationBar и переопределяет UIBarButtonItem (кнопка меню) вправо. Смотрите фотографии ниже:
Код iOS 6: Вот как я его кодировал в iOS 6, где я мог установить рамку TextFields на то, что мне понравилось!
UITextField *sbTextField = (UITextField *)[searchBar.subviews lastObject];
[sbTextField removeFromSuperview];
CGRect rect = searchBar.frame;
rect.size.height = 32;
rect.size.width = 210;
sbTextField.frame = rect;
[sbTextField setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin];
UIBarButtonItem *searchBarNavigationItem = [[UIBarButtonItem alloc] initWithCustomView:sbTextField];
[[self navigationItem] setLeftBarButtonItem:searchBarNavigationItem];
Результат из кода выше в iOS 7: ! [взгляд на iOS 7]
Код iOS 7: Разница в iOS 7 заключается в том, что вам нужно использовать подпункты для добавления UITextField в UISearchBar/UINavigationBar. Делая это, я еще не смог изменить свой кадр. В настоящее время он перекрывает кнопку меню справа, что можно увидеть на рисунке ниже этого кода...
UITextField* sbTextField;
CGRect rect = subView.frame;
rect.size.height = 32;
rect.size.width = 115;
for (UIView *subView in self.searchBar.subviews){
for (UIView *ndLeveSubView in subView.subviews){
if ([ndLeveSubView isKindOfClass:[UITextField class]])
{
sbTextField = (UITextField *)ndLeveSubView;
sbTextField.backgroundColor =[UIColor whiteColor];
UIBarButtonItem *searchBarNavigationItem = [[UIBarButtonItem alloc] initWithCustomView:sbTextField];
sbTextField.frame = rect;
self.navigationItem.leftBarButtonItem = searchBarNavigationItem;
self.navigationItem.rightBarButtonItem = menuButton;
[sbTextField removeFromSuperview];
break;
}
}
}
[self.searchBar reloadInputViews];
ТАК... Можно ли каким-либо образом изменить рамку subView (TextField)? :(
EDIT
Ответ вроде хромает. Чтобы заставить код работать в ios7 с кнопкой справа от TextField, TextField должен быть установлен как titleView панели навигации. Что не было в ios 6. Но будут другие глюки, и не рекомендуется использовать TextField в пределах панели поиска в iOS7. Вместо этого используйте searchDispalyController. Смотри мой ответ ниже
self.navigationItem.titleView = sbTextField;