2017-06-18 89 views
9

使用iOS 11,searchBars默認爲左對齊文本。雖然這與iOS的其他本地更改看起來不錯,但它並不適合我的設計,我希望它能成爲中心,就像以前一樣。如何在UISearchBar中插入佔位符文本iOS 11

我在UISearchBar上找不到任何這樣的對齊屬性。我錯過了什麼,或者它根本不可能?我是否必須創建自己的自定義搜索欄,例如從UITextField導出才能實現此目的?

+0

是的,我希望把它放在中心了。蘋果讓我們設置searchBar.placeHolder.textAlignment = NSTextAlignmentCenter有多難? – coolcool1994

回答

3

這是一個解決方法。

首先你需要得到搜索欄的文本字段和居中文本對齊的:

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

之後,您需要更改佔位符的對齊方式。出於某種原因,它不會隨文本字段的對齊而改變。你應該做的是通過增加填充到文本框的左視圖,只有當搜索控制器是活動的,所以用它的委託方法:

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 
} 

好運

+1

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

0

讓placeHolderOffSet = UIOffset(水平:100 ,垂直:0) setPositionAdjustment(placeHolderOffSet,用於:.search)

如果希望不同的位置,而杆是活動的,你就必須在相應的委託方法以重置此

3

我有完全相同的問題 - 我很努力地理解爲什麼默認對齊會被改變,而不允許我們輕鬆地將其設置回中間位置。

下面對我的作品(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 
}