搜索文本字段在iOS 11上的搜索栏中错误放置
我正在使用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上测试了这个。
这是一个已知的问题? 这有什么问题吗? 或者是我在我身上做错了什么?
任何帮助将不胜感激 (:
这是代码,显示如何在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; }
Swift:在viewDidLoad()中使用以下代码:
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; } } }
您的图像(确切的问题)无法访问。 所以可以看到确切的问题。 但是从你的发言中,我发现了你的问题。 我尝试跟随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 }
输出: