Подтвердить что ты не робот

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. Любая помощь приветствуется.

4b9b3361

Ответ 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