2017-06-18 102 views
9

iOS 11 ile searchBars soldan hizalanmış bir metne varsayılan değerdir. Bu, iOS'taki yerel değişikliklerin geri kalanıyla iyi görünmekle birlikte, tasarımıma gerçekten uymuyor ve daha önce olduğu gibi merkez olmasını isterim.Yer tutucu metni UISearchBar iOS 11'de nasıl konumlandırılır

UISearchBar'da böyle bir hizalama öznitelikleri bulamıyorum. Bir şeyi mi özlüyorum yoksa mümkün değil mi? Bunu elde etmek için UITextField'dan türetilmiş kendi özel arama çubuğumu oluşturmam gerekir mi?

+0

Evet ben de merkeze koymak istiyorum. Apple'ın searchBar.placeHolder.textAlignment = NSTextAlignmentCenter ayarını yapması ne kadar zor? – coolcool1994

cevap

3

Bu biraz bir çözümdür. Eğer arama çubuğunun metin alanını almak ve metin hizalamasını ortalamak için gereken tüm

İlk

:

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

Bundan sonra, yer tutucu hizalamasını değiştirmek gerekir. Bazı nedenlerden dolayı metin alanının hizalanması ile değişmez.

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 
} 

İyi şanslar

+1

let paddingView = UIView (çerçeve: CGRect (x: 0, y: 0, genişlik: genişlik, yükseklik: self.frame.size.height)) –

0

izin placeHolderOffSet = UIOffset (yatay: 100 Sen arama kontrolörü aktif olduğunda textfield sol görüşe bir dolgu ekleyerek sadece, bu yüzden 's temsilci yöntemleri kullanmak gerçekleştirmeliyiz dikey: 0) setPositionAdjustment (placeHolderOffSet için: bar etkin durumdayken farklı bir pozisyon istiyorsanız .search)

, karşılık gelen temsilci yönteminde bu sıfırlamak gerekir

3

Tam olarak aynı problemim vardı - varsayılan hizalamanın, bunu tekrar merkeze kolayca ayarlamamıza izin vermeden neden değiştirileceğini anlamak için uğraşıyorum. Benim için

aşağıda eserleri (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 
}