UINavigationBar中的iOS 11 UISearchBar

我想在新的导航栏中放置一个带有新iOS 11大标题的搜索栏。 但是,搜索栏的颜色会自动由iOS应用,我无法更改它。

if #available(iOS 11.0, *) { let sc = UISearchController(searchResultsController: nil) navigationItem.searchController = sc navigationItem.hidesSearchBarWhenScrolling = false } 

搜索栏是深蓝色背景,但我只想将其更改为白色。

在此处输入图像描述

设置背景颜色会导致:

 navigationItem.searchController?.searchBar.backgroundColor = UIColor.white 

在此处输入图像描述

我在搜索栏上也试过了setScopeBarButtonBackgroundImagesetBackgroundImage ,但一切看起来都很奇怪。

此外,当我通过点击搜索栏触发搜索时,它会切换到右侧有取消按钮的模式。 (“Abbrechen”德文)

在此处输入图像描述

并且“Abbrechen”文本颜色也无法更改。 (需要它也是白色的)

任何帮助表示赞赏。

编辑:根据要求,这里是导航栏样式的代码:

 self.navigationBar.tintColor = UIColor.myWhite self.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.myWhite, NSAttributedStringKey.font: UIFont.myNavigationBarTitle()] self.navigationBar.barTintColor = UIColor.myTint if #available(iOS 11.0, *) { self.navigationBar.prefersLargeTitles = true self.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.myWhite, NSAttributedStringKey.font: UIFont.myNavigationBarLargeTitle()] } 

目前的结果:我使用Krunals的想法设置搜索栏背景的颜色,但圆角丢失了。 重新设置圆角后,搜索栏的动画似乎被打破。

在此处输入图像描述

所以仍然没有令人满意的解 似乎嵌入到iOS 11导航栏中的搜索栏无法自定义。 同时,仅仅改变占位符文本的颜色就足够了,但即使这样也不可能。 (我尝试过StackOverflow的多种方法 – 不起作用)

现在这就是你想要的……

 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 = 10; backgroundview.clipsToBounds = true; } } if let navigationbar = self.navigationController?.navigationBar { navigationbar.barTintColor = UIColor.blue } navigationItem.searchController = sc navigationItem.hidesSearchBarWhenScrolling = false } 

结果:

在此处输入图像描述

在此处输入图像描述

圆角:
圆角的动画也很好用。

在此处输入图像描述

我在AppDelegate中使用此代码更改了文本字段的背景。

斯威夫特4

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //background color of text field UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan } 

结果就是这样

用于将背景更改为青色的示例

目标C.

 if (@available(iOS 11.0, *)) { self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; self.searchController.searchResultsUpdater = self; self.searchController.searchBar.delegate = self; self.searchController.dimsBackgroundDuringPresentation = NO; self.navigationItem.searchController=self.searchController; self.navigationItem.hidesSearchBarWhenScrolling=NO; self.searchController.searchBar.searchBarStyle = UISearchBarStyleProminent; self.searchController.searchBar.showsBookmarkButton = NO; self.searchController.searchBar.placeholder = @"Search"; self.searchController.searchBar.tintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; self.searchController.searchBar.barTintColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1]; UITextField *txfSearchField = [self.searchController.searchBar valueForKey:@"_searchField"]; txfSearchField.tintColor=[UIColor colorWithRed:21/255.0 green:157/255.0 blue:130/255.0 alpha:1]; txfSearchField.textColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1]; txfSearchField.backgroundColor=[UIColor whiteColor]; UIView *backgroundview= [[txfSearchField subviews]firstObject ]; backgroundview.backgroundColor=[UIColor whiteColor]; // Rounded corner backgroundview.layer.cornerRadius = 8; backgroundview.clipsToBounds = true; } 

这应该适合你

 func addSearchbar(){ if #available(iOS 11.0, *) { let sc = UISearchController(searchResultsController: nil) let scb = sc.searchBar scb.tintColor = UIColor.white if let navigationbar = self.navigationController?.navigationBar { //navigationbar.tintColor = UIColor.green //navigationbar.backgroundColor = UIColor.yellow navigationbar.barTintColor = UIColor.blue } navigationController?.navigationBar.tintColor = UIColor.green navigationItem.searchController = sc navigationItem.hidesSearchBarWhenScrolling = false } } 

结果

在此处输入图像描述

在此处输入图像描述

这是我用来使搜索栏变白的代码:

 if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField { if let backgroundview = textfield.subviews.first { backgroundview.backgroundColor = UIColor.init(white: 1, alpha: 1) backgroundview.layer.cornerRadius = 10 backgroundview.clipsToBounds = true } } 

在此处输入图像描述

试试这个代码,

 UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"]; txfSearchField.backgroundColor = [UIColor redColor]; 
Interesting Posts