iOS 11 barre de recherche personnalisée dans la barre de navigation

je veux changer la couleur du texte et de l'icône dans la barre de recherche iOS 11 quand il est intégré dans la barre de navigation. Ainsi le texte placé, le texte de recherche et l'icône de recherche.

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
}

Comme vous pouvez le voir dans l'image, le texte est gris sur un arrière-plan bleu profond, qui semble laid. Je veux le texte et l'icône d'être au moins blanc. (changer la couleur de fond bleue ne fonctionne pas non plus vraiment très bon, voir mon autre question )

la seule chose qui fonctionne est de changer la couleur du curseur clignotant et le bouton" cancel", qui est fait avec le .nuance de couleur à la propriété.

les Solutions qui semblent fonctionner dans iOS 10 et ci-dessous ne semblent plus fonctionner dans iOS 11, alors s'il vous plaît ne poster que les solutions que vous savez travailler dans iOS 11. Grâce.

peut - être que je manque le point à propos de ce "style automatique" dans iOS 11. Toute aide est appréciée.

32
demandé sur Darko 2017-09-01 23:00:42

5 réponses

je viens de trouver comment mettre aussi le reste d'entre eux: (avec l'aide de Brandon, merci!)

La "Annuler" texte:

searchController.searchBar.tintColor = .white

l'icône de recherche:

searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.search, state: .normal)

l'icône claire:

searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.clear, state: .normal)

le texte de recherche:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]

Merci pour l'aide @Brandon!

enter image description here

L'espace réservé:

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

enter image description here

Le fond blanc:

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

tiré de ici .

83
répondu Darko 2017-09-16 05:49:16

Mettre

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

et

UISearchBar.appearance().tintColor = UIColor.white dans le AppDelegate .

alternativement, mettez les deux dans [UIViewController viewDidLoad:]

3
répondu Brandon 2017-09-02 00:55:59

Jeu De Recherche De La Couleur De Texte

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

Jeu De Recherche De L'Espace Réservé De La Couleur

(UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]) ).attributedPlaceholder = [NSForegroundColorAttributeName: UIColor.white]
3
répondu Donny 2017-09-27 07:43:07

en plus de la réponse de Darko. Dans mon cas, je dois obtenir pur blanc recherche textfield couleur. J'ai aussi besoin d'un borderLine personnalisé et cornerRadius. Donc si je mets juste la couleur de fond au blanc, le rayon de coin personnalisé et la ligne de Frontière personnalisée j'ai quelque chose comme ça. Look at this ugly grey highLight when you tap on textfield

le problème est que la barre de recherche a quelques sous-vues et je viens de les enlever. Voici mon code:

@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;
}
}

Maintenant, j'ai une barre de recherche avec fond blanc pur, cornerRadius Personnalisé, Largeur de Frontière personnalisé. J'ai aussi désactivé le surligneur Gris lors du robinet. Editing searchfield Resign first responder

1
répondu Alex Kolovatov 2018-03-27 16:52:56

ce code change la couleur de fond du champ de texte

Swift 4

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        //background color of text field
         UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan

        }

édité: exemple d'un UISearchBar en cyan

sample

-1
répondu Maruta 2018-01-25 10:53:47