IOS 11 настроить панель поиска в панели навигации
Я хочу изменить цвет текста и значка в панели поиска iOS 11, когда он встроен в панель навигации. Так что текст заполнителя, текст поиска и значок поиска.
![введите описание изображения здесь]()
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = false
let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
searchController.searchBar.placeholder = "Suchen"
searchController.searchBar.tintColor = .white
}
Как вы можете видеть на изображении, текст серый на синем фоне, который выглядит уродливым. Я хочу, чтобы текст и значок были по крайней мере белыми. (изменение цвета синего фона также не очень хорошо работает, см. мой другой вопрос)
Единственное, что работает, это изменение цвета мигающего курсора и кнопки "Отмена", которая выполняется с помощью свойства .tintColor.
Решения, которые, кажется, работают в iOS 10 и ниже, похоже, больше не работают в iOS 11, поэтому, пожалуйста, публикуйте только те решения, которые, как вы знаете, работают в iOS 11. Спасибо.
Может быть, я пропущу пункт об этом "автоматическом стиле" в iOS 11. Любая помощь приветствуется.
Ответы
Ответ 1
Я только узнал, как установить и остальных из них: (с помощью Брэндона, спасибо!)
Текст "Отмена":
searchController.searchBar.tintColor = .white
Значок поиска:
searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.search, state: .normal)
Значок очистки:
searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.clear, state: .normal)
Текст поиска:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]
Спасибо за помощь @Brandon!
![введите описание изображения здесь]()
Заполнитель:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])
![введите описание изображения здесь]()
Белый фон:
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
}
![введите описание изображения здесь]()
Взято из здесь.
Ответ 2
Установить цвет текста поиска
(UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]) ).defaultTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
Установить цвет заставки поиска
(UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]) ).attributedPlaceholder = [NSForegroundColorAttributeName: UIColor.white]
Ответ 3
Положите
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
и
UISearchBar.appearance().tintColor = UIColor.white
в AppDelegate
.
В качестве альтернативы поместите их как в [UIViewController viewDidLoad:]
Ответ 4
Этот код изменяет цвет фона текстового поля
Swift 4
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//background color of text field
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan
}
отредактирован: образец UISearchBar в циане
![sample]()