2017-06-18 75 views
9

W systemie iOS 11 paski wyszukiwania domyślnie wybierają tekst wyrównany do lewej. Chociaż to dobrze wygląda wraz z resztą natywnych zmian w systemie iOS, nie pasuje on do mojego projektu i chciałbym, aby był on centralny, tak jak wcześniej.Jak wyśrodkować tekst zastępczy w systemie UISearchBar iOS 11

Nie mogę znaleźć takich atrybutów wyrównania na UISearchBar. Czy czegoś brakuje, czy po prostu nie jest to możliwe? Czy muszę stworzyć własny niestandardowy pasek wyszukiwania np. Pochodzący z UITextField, aby to osiągnąć?

+0

Tak chcę, aby umieścić go w środku też. Jak ciężko Apple pozwala nam ustawić searchBar.placeHolder.textAlignment = NSTextAlignmentCenter? – coolcool1994

Odpowiedz

3

To trochę obejście problemu.

Przede wszystkim trzeba się pole tekstowe paska wyszukiwania i centrum wyrównanie tekstu:

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

Po tym, trzeba zmienić ustawienie elementu zastępczego. Z jakiegoś powodu nie zmienia się z wyrównaniem pola tekstowego. Należy to zrobić poprzez dodanie dopełnienie do lewej widzenia tekstowym tylko gdy sterownik wyszukiwania jest aktywny, więc używać go za metody Delegat:

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 
} 

Powodzenia

+1

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

0

niech placeHolderOffSet = UIOffset (pozioma: 100 pionowe: 0) setPositionAdjustment (placeHolderOffSet za: .search)

jeśli chcesz inną pozycję a bar jest czynny, będziesz musiał zresetować to w odpowiedniej metody delegata

3

Miałem dokładnie ten sam problem - staram się zrozumieć, dlaczego domyślne wyrównanie zostanie zmienione, nie pozwalając nam łatwo ustawić go z powrotem na środek.

Poniższe działa na mnie (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 
}