2017-06-18 6 views
9

Avec iOS 11, searchBars est défini par défaut sur un texte aligné à gauche. Bien que cela semble bien avec le reste des changements natifs à iOS, il ne correspond pas vraiment à mon design, et j'aimerais qu'il soit au centre, comme c'était le cas auparavant.Comment centrer le texte de l'espace réservé dans UISearchBar iOS 11

Je ne trouve aucun attribut d'alignement de ce type sur UISearchBar. Ai-je manqué quelque chose, ou est-ce simplement impossible? Dois-je créer ma propre barre de recherche personnalisée, par exemple dérivée d'un UITextField pour y parvenir?

+0

Ouais je veux le mettre au centre aussi. À quel point est-il difficile pour Apple de nous laisser définir searchBar.placeHolder.textAlignment = NSTextAlignmentCenter ?? – coolcool1994

Répondre

3

Ceci est un peu une solution de contournement.

d'abord tout ce que vous devez obtenir le champ de texte de la barre de recherche et centrer l'alignement du texte:

let textFieldOfSearchBar = searchController.searchBar.value(forKey: "searchField") as? UITextField textFieldOfSearchBar?.textAlignment = .center

Après cela, vous devez modifier l'alignement de l'espace réservé. Pour une raison quelconque, cela ne change pas avec l'alignement du champ de texte. Vous devriez le faire en ajoutant un rembourrage à la vue de gauche du champ de texte uniquement lorsque le contrôleur de recherche est actif, donc utiliser ses méthodes de délégué:

func presentSearchController(_ searchController: UISearchController) { 
    //Is active 
    let width: CGFloat = 100.0 //Calcualte a suitable width based on search bar width, screen size, etc.. 

    let textfieldOfSearchBar = searchController.searchBar.value(forKey: "searchField") as? UITextField 

    let paddingView = UIView(x: 0, y: 0, w: width, h: searchController.searchBar.frame.size.height) 
    textfieldOfSearchBar?.leftView = paddingView 
    textfieldOfSearchBar?.leftViewMode = .unlessEditing 
} 

func willDismissSearchController(_ searchController: UISearchController) { 
    let textfieldOfSearchBar = searchController.searchBar.value(forKey: "searchField") as? UITextField 
    textfieldOfSearchBar?.leftView = nil 
} 

Bonne chance

+1

let paddingView = UIView (cadre: CGRect (x: 0, y: 0, largeur: largeur, hauteur: self.frame.size.height)) –

0

laisser placeHolderOffSet = UIOffset (horizontal: 100 , vertical: 0) setPositionAdjustment (placeHolderOffSet, pour: .search)

si vous voulez une autre position tandis que le bar est actif, vous devrez réinitialiser ce dans la méthode déléguée correspondante

3

J'ai eu exactement le même problème - j'ai du mal à comprendre pourquoi l'alignement par défaut serait changé sans nous permettre de revenir facilement au centre.

Les œuvres ci-dessous pour moi (Swift):

let placeholderWidth = 200 // Replace with whatever value works for your placeholder text 
var offset = UIOffset() 

override func viewDidLoad() { 
    offset = UIOffset(horizontal: (searchBar.frame.width - placeholderWidth)/2, vertical: 0) 
    searchBar.setPositionAdjustment(offset, for: .search) 
} 

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { 
    let noOffset = UIOffset(horizontal: 0, vertical: 0) 
    searchBar.setPositionAdjustment(noOffset, for: .search) 

    return true 
} 


func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool { 
    searchBar.setPositionAdjustment(offset, for: .search) 

    return true 
}