IOS 11 UISearchBar в UINavigationBar
Я хочу разместить панель поиска в новой навигационной панели с новыми заголовками 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
![введите описание изображения здесь]()
Я пробовал также setScopeBarButtonBackgroundImage
и setBackgroundImage
в строке поиска, но все выглядит совершенно странно.
Также, когда я запускаю поиск, нажав на строку поиска, он переключается в режим с кнопкой отмены справа. ( "Аббречен" на немецком языке)
![введите описание изображения здесь]()
И цвет текста "Аббречен" также не может быть изменен. (нужен он также белый)
Любая помощь приветствуется.
Изменить: в соответствии с запросом здесь приведен код для стилизации панели навигации:
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()]
}
Текущий результат:
Я использовал идею Круналов, чтобы установить цвет фона панели поиска, но затем закругленные углы теряются. После повторной настройки закругленных углов анимация строки поиска, кажется, сломана.
![введите описание изображения здесь]()
Таким образом, все еще нет удовлетворительного решения. Кажется, что панель поиска при встраивании в панель навигации в iOS 11 невозможно настроить. Между тем мне было бы достаточно изменить цвет текста заполнителя, но даже это кажется невозможным. (Я пробовал несколько подходов из StackOverflow - не работает)
Ответы
Ответ 1
Теперь это то, что вы хотите...
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
Это должно работать для вас
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
}
}
Результат
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Ответ 3
Цель 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;
}
Ответ 4
Я изменил фон текстового поля с помощью этого кода внутри AppDelegate.
Swift 4
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//background color of text field
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan
}
Это результат
![пример, используемый для изменения фона до голубого цвета]()
Ответ 5
Вот код, который я использовал, чтобы сделать панель поиска белым:
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
}
}
![enter image description here]()
Ответ 6
Попробуйте этот код,
UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.backgroundColor = [UIColor redColor];
Ответ 7
Проверено на ios 13
Идеальный белый фон на панели поиска
func setupSearchbarController(){
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.white
textfield.backgroundColor = UIColor.white
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 = AppColor.themeColor
}
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
}