使用iOS 11,searchBars默認爲左對齊文本。雖然這與iOS的其他本地更改看起來不錯,但它並不適合我的設計,我希望它能成爲中心,就像以前一樣。如何在UISearchBar中插入佔位符文本iOS 11
我在UISearchBar
上找不到任何這樣的對齊屬性。我錯過了什麼,或者它根本不可能?我是否必須創建自己的自定義搜索欄,例如從UITextField
導出才能實現此目的?
使用iOS 11,searchBars默認爲左對齊文本。雖然這與iOS的其他本地更改看起來不錯,但它並不適合我的設計,我希望它能成爲中心,就像以前一樣。如何在UISearchBar中插入佔位符文本iOS 11
我在UISearchBar
上找不到任何這樣的對齊屬性。我錯過了什麼,或者它根本不可能?我是否必須創建自己的自定義搜索欄,例如從UITextField
導出才能實現此目的?
這是一個解決方法。
首先你需要得到搜索欄的文本字段和居中文本對齊的:
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
}
好運
let paddingView = UIView(frame:CGRect(x:0,y:0,width:width,height:self.frame.size.height)) –
讓placeHolderOffSet = UIOffset(水平:100 ,垂直:0) setPositionAdjustment(placeHolderOffSet,用於:.search)
如果希望不同的位置,而杆是活動的,你就必須在相應的委託方法以重置此
我有完全相同的問題 - 我很努力地理解爲什麼默認對齊會被改變,而不允許我們輕鬆地將其設置回中間位置。
下面對我的作品(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
}
是的,我希望把它放在中心了。蘋果讓我們設置searchBar.placeHolder.textAlignment = NSTextAlignmentCenter有多難? – coolcool1994