iOS 6 アプリと同じように、UISearchBar に TextField を配置して同じ外観を実現しようとしています。いくつかの方法でコーディングしようとしましたが、まだ成功していません。問題は、iOS 7 以降、TextField のフレームを変更できないことです。その結果、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 look]
iOS 7 コード: iOS 7 の違いは、UITextField を UISearchBar/UINavigationBar に追加するために subViews を使用する必要があることです。これを行うことで、私はまだそのフレームを変更できませんでした. 現在、このコードの下の図に示されている右側の menuButton に重なっています...
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];
SO ... サブビューのフレーム (TextField) を何らかの方法で変更することは可能ですか? :(
編集
答えはちょっと不自由です。TextField の右側にあるボタンを使用して ios7 でコードを機能させるには、TextField を navigationBar の titleView として設定する必要があります。これは ios 6 では当てはまりませんでした。しかし、他の問題が発生する可能性があり、iOS7 の searchBars 内で TextField を使用することはお勧めしません。代わりに searchDispalyController を使用してください。以下の私の答えを見てください
self.navigationItem.titleView = sbTextField;