it-swarm.com.ru

iOS 11 настроить панель поиска в панели навигации

Я хочу изменить цвет текста и значка на панели поиска iOS 11, когда он встроен в панель навигации. Так что заполнитель текста, поиск текста и значок поиска.

 enter image description here

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

35
Darko

Я только что узнал, как настроить и остальные из них: (с помощью Брэндона, спасибо!)

Текст "Отмена":

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!

 enter image description here

Заполнитель:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])

 enter image description here

Белый фон:

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
}

 enter image description here

Взято из здесь .

93
Darko

Установить цвет текста поиска

(UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]) ).defaultTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

Задать цвет заполнителя поиска 

(UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]) ).attributedPlaceholder = [NSForegroundColorAttributeName: UIColor.white]
5
Donny

Положил 

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

а также

UISearchBar.appearance().tintColor = UIColor.white в AppDelegate.

Кроме того, поместите их обоих в [UIViewController viewDidLoad:]

3
Brandon

В дополнение к ответу Дарко . В моем случае мне нужно получить чисто белый цвет текстового поля поиска . Также мне нужны пользовательские borderLine и cornerRadius . Поэтому, если я просто установлю цвет фона на белый, установите пользовательский угол радиус и пользовательская граница у меня есть что-то вроде этого . Look at this ugly grey highLight when you tap on textfield

Проблема в том, что в строке поиска есть некоторые подпредставления, и я только что удалил их .... Вот мой код:

@interface YourViewController () <UISearchBarDelegate, UISearchControllerDelegate>
// your properties
@property (nonatomic,strong) UISearchController *searchController;
@property (nonatomic,strong) UISearchBar *searchBar;
@end

- (void)viewDidLoad {
[super viewDidLoad];

_searchController = [[UISearchController alloc] initWithSearchResultsController:self.resultsTableController];
_searchController.delegate = self;
_searchController.searchBar.delegate = self;
_searchBar = self.searchController.searchBar;

if (@available(iOS 11.0, *)) {

    UITextField *searchTextField = [_searchBar valueForKey:@"searchField"];
if (searchTextField != nil) {
        searchTextField.layer.cornerRadius = 4.f;
        searchTextField.layer.borderWidth = 1.f;
        searchTextField.clipsToBounds = YES;

        for (UIView *subView in searchTextField.subviews) {
            [subView removeFromSuperview];
        }
}

// Color for "Cancel" button
    _searchBar.tintColor = [UIColor blackColor];
// Add searchController to navgationBar
    _navigationItem.searchController = _searchController;
// Hide searchBar when scroll
    _navigationItem.hidesSearchBarWhenScrolling = YES;
}
}

Теперь у меня есть панель поиска с чистым белым фоном, пользовательский cornerRadius, пользовательская ширина границы. Также я отключил серую подсветку при нажатии . Editing searchfield Resign first responder

1
Alex Kolovatov

мои два цента за Swift 4.x, слегка убранные.

Добавить в контроллер или приложение делегат:

appearance.backgroundColor = .green
let myFont = UIFont.italicSystemFont(ofSize: 12)
let attribs = [
    NSAttributedString.Key(rawValue: NSAttributedString.Key.font.rawValue): myFont,
    NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.red
]

appearance.defaultTextAttributes =  attribs

в контроллере:

self.searchBar.barTintColor = .blue

Вы получите синий фон, зеленый фон панели поиска, красный шрифт курсивом:

 enter image description here

0
ingconti