如何在UISearchBar中插入占位符文本iOS 11
使用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