如何在UISearchBar中插入占位符文本iOS 11

问题描述:

使用iOS 11,searchBars默认为左对齐文本。虽然这与iOS的其他本地更改看起来不错,但它并不适合我的设计,我希望它能成为中心,就像以前一样。如何在UISearchBar中插入占位符文本iOS 11

我在UISearchBar上找不到任何这样的对齐属性。我错过了什么,或者它根本不可能?我是否必须创建自己的自定义搜索栏,例如从UITextField导出才能实现此目的?

+0

是的,我希望把它放在中心了。苹果让我们设置searchBar.placeHolder.textAlignment = NSTextAlignmentCenter有多难? – coolcool1994

这是一个解决方法。

首先你需要得到搜索栏的文本字段和居中文本对齐的:

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)) –

让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 
}