我使用UISearchController作为导航栏的一部分,使用iOS 11中引入的新API。我在ViewController的viewDidLoad中以下列方式使用它
- (void)viewDidLoad {
[super viewDidLoad];
[_table setDataSource:self];
[_table setDelegate:self];
searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
[self.navigationItem setSearchController:searchController];
[self.navigationItem setHidesSearchBarWhenScrolling:NO];
[searchController.searchBar setBackgroundColor:[UIColor greenColor]];
}
但是,搜索文本字段会在搜索栏内的错误位置呈现。请看下面的截图。
我检查了视图层次结构,发现搜索栏中的UISearchBarTextField对象(不能直接访问devs)的frame.y值为1,这可能导致此问题。我已经在iOS 11 beta 10和iOS 11 GM上测试了这个。
这是一个已知问题吗?有没有解决这个问题?或者这是我在我的方面做错了什么?
任何帮助将不胜感激(:
答案 0 :(得分:6)
此代码显示如何在iOS 11上的searchBar中更改textField的背景颜色。
Obj-C: in(void)viewDidLoad使用此代码:
if (@available(iOS 11, *)) {
UITextField *textField = [self.searchController.searchBar valueForKey:@"searchField"];
UIView *backgroundView = textField.subviews.firstObject;
backgroundView.backgroundColor = UIColor.whiteColor;
backgroundView.layer.cornerRadius = 10;
backgroundView.clipsToBounds = YES;
}
viewDidLoad()中的Swift:使用此代码:
if #available(iOS 11.0, *) {
if let textfield = scb.value(forKey: "searchField") as? UITextField {
textfield.textColor = UIColor.blue
if let backgroundview = textfield.subviews.first {
backgroundview.backgroundColor = UIColor.white
backgroundview.layer.cornerRadius = 10;
backgroundview.clipsToBounds = true;
}
}
}
答案 1 :(得分:4)
无法访问您的图像(确切问题)。所以可以看到确切的问题。但是从你的陈述中,我发现了你的问题。我尝试跟随iOS 11及其正常工作。
我的代码解决了您的问题,但它在Swift中。您需要将其转换为Objective-C。你不难做到这一点。
if #available(iOS 11.0, *) {
let sc = UISearchController(searchResultsController: nil)
sc.delegate = self
let scb = sc.searchBar
scb.tintColor = UIColor.white
scb.barTintColor = UIColor.white
if let textfield = scb.value(forKey: "searchField") as? UITextField {
textfield.textColor = UIColor.blue
if let backgroundview = textfield.subviews.first {
// Background color
backgroundview.backgroundColor = UIColor.white
// Rounded corner
backgroundview.layer.cornerRadius = 5;
backgroundview.clipsToBounds = true;
}
}
if let navigationbar = self.navigationController?.navigationBar {
navigationbar.barTintColor = UIColor.blue
}
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
<强>输出:强>