如何移除UISearchBar搜索栏中的放大镜图标
隐藏UISearchBar左侧放大镜图标的正确实现
前期设置无效的核心原因
你之前配置search.showsScopeBar = false无法隐藏放大镜,是因为该属性和放大镜图标没有任何关联:showsScopeBar的作用是控制搜索栏下方分范围选择的标签栏的显示状态,并不是用来调整输入框内组件显隐的,自然达不到你想要的效果。
可直接落地的实现代码
搜索栏的放大镜图标本质是其内部封装的输入框(UITextField)的左侧附属视图,只要将这个左侧视图移除并关闭显示模式,就能实现图标完全隐藏,代码可以直接整合到你现有的初始化逻辑中:
public var searchBar: UISearchBar = { let search = UISearchBar() search.showsScopeBar = false search.barTintColor = .backgroundColor search.text = "Selecione ou digite " // 新增逻辑:移除输入框左侧的放大镜图标 if let searchInputField = search.value(forKey: "searchField") as? UITextField { searchInputField.leftView = nil searchInputField.leftViewMode = .never } return search }()
适配提示
- 上述通过KVC获取
searchField的方式是自定义UISearchBar的通用成熟方案,对应API从iOS7开始保持稳定,不会出现跨版本失效的问题 - 隐藏图标后如果出现文本位置偏移,可以手动调整输入框的左右内边距,让提示文字和搜索栏整体边距保持视觉对齐
- 注意区分UISearchBar内所有按钮的对应属性:
showsBookmarkButton控制右侧书签按钮显隐、showsSearchResultsButton控制右侧搜索结果按钮显隐,二者都和左侧放大镜图标无关
内容的提问来源于stack exchange,提问作者YAGOCOMY
相关产品推荐
相关产品推荐

