我想从UISearchBar中删除清除按钮(灰色x)。我尝试像this answer中描述的那样做,但它不起作用。
我将Objective-C代码从答案和下面的评论翻译成以下Swift代码:
for subview in searchBar.subviews {
configureSearchBarView(subview as UIView)
}
func configureSearchBarView(view: UIView) {
for subview in view.subviews {
self.configureSearchBarView(subview as UIView)
}
if subview.conformsToProtocol(UITextInputTraits) {
var clearView = view as UITextField
clearView.clearButtonMode = UITextFieldViewMode.Never
}
}
不幸的是,这并没有删除清除按钮。
Another answer建议使用appearanceWhenContainedIn
,但此方法似乎并未在Swift中实现。
有什么想法吗?
答案 0 :(得分:4)
我找到了解决方案。可以将清除按钮与自定义图像交换:
UISearchBar.appearance().setImage(UIImage(named: "emptyImg"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal)
UISearchBar.appearance().setImage(UIImage(named: "emptyImg"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Highlighted)
emptyImg
是一个包含一个白色像素的png。找到this answer
答案 1 :(得分:3)
<强>夫特强>
我找到了一种更好的方法,可以使用 clearButtonMode = .never
完全删除按钮let searchBarStyle = searchBar.value(forKey: "searchField") as? UITextField
searchBarStyle?.clearButtonMode = .never
答案 2 :(得分:3)
在iOS 13上进行了测试
正如我在another answer中指出的那样,这是使我完全消失的那条衬里:
searchBar.searchTextField.clearButtonMode = .never
但是,如果您只希望在用户键入时显示它,然后在搜索栏失去焦点时使其消失,也可以将其设置为.whileEditing
。