我正在尝试使用其中的 TextField 完成与我的 UISearchBar 相同的外观,就像在我的 iOS 6 应用程序中一样。我尝试以多种方式对其进行编码,但尚未成功。问题是,自 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 外观]
iOS 7 代码:iOS 7 的不同之处在于,您需要使用 subViews 才能将 UITextField 添加到 UISearchBar/UINavigationBar。通过这样做,我还不能改变它的框架。它当前与右侧的 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];
所以...是否可以以任何方式更改子视图的框架(TextField)?:(
编辑
答案有点蹩脚。为了使代码在 ios7 中使用 TextField 右侧的按钮,必须将 TextField 设置为 navigationBar 的 titleView。在 ios 6 中不是这种情况。但是会有其他故障,不建议在 iOS7 的 searchBars 中使用 TextField。请改用 searchDispalyController。在下面查看我的答案
self.navigationItem.titleView = sbTextField;