搜索文本字段在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]]; } 

但是,搜索文本字段将呈现在搜索栏内的错误位置。 请看下面的截图。

View post on imgur.com

我检查了视图层次结构,发现搜索栏中的UISearchBarTextField对象(不能直接访问devs)的frame.y值为1,这可能导致此问题。 我已经在iOS 11 beta 10和iOS 11 GM上测试了这个。

这是一个已知的问题? 这有什么问题吗? 或者是我在我身上做错了什么?

任何帮助将不胜感激 (:

这是代码,显示如何在iOS 11上的searchBar中更改textField的背景颜色。

之前: iOS 11 searchBar的默认状态

后: 在此处输入图像描述

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 } 

输出:

在此处输入图像描述