iOS 11中修改SearchBar颜色导致取消按钮不可见问题求助
iOS 11 SearchBar取消按钮颜色丢失的解决思路
嘿,我之前也踩过iOS 11里UISearchBar这个坑!修改完搜索栏颜色后取消按钮直接“隐身”,确实挺闹心的,给你几个亲测有效的解决思路:
直接设置SearchBar的
tintColor
iOS 11中,UISearchBar的取消按钮颜色默认受tintColor属性控制。如果你修改了搜索栏的背景色或其他样式后按钮消失,大概率是tintColor被覆盖成了和背景色相近的颜色。可以单独设置这个属性来恢复按钮可见性:// Swift示例 searchBar.tintColor = .white // 替换成你需要的按钮颜色// Objective-C示例 self.searchBar.tintColor = [UIColor whiteColor];通过KVC直接获取并修改取消按钮
有时候系统的tintColor设置会被其他样式覆盖,这时候可以通过KVC拿到内部的取消按钮实例,直接设置它的标题颜色:// Swift示例 if let cancelButton = searchBar.value(forKey: "cancelButton") as? UIButton { cancelButton.setTitleColor(.white, for: .normal) cancelButton.setTitleColor(.lightGray, for: .highlighted) // 可选:设置高亮状态颜色 }这个方法虽然用到了私有属性
cancelButton,但在iOS 11及后续多个版本中都稳定可用,很多开发者都在实际项目中使用。针对SearchBar单独设置按钮外观
如果你在全局设置了UIButton.appearance()的样式,可能会影响到搜索栏的取消按钮。可以通过外观代理,只对UISearchBar内部的按钮生效:// Swift示例 UIButton.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleColor(.white, for: .normal)这样既能保留全局按钮样式,又能单独修正搜索栏取消按钮的颜色。
检查搜索栏样式设置
如果你设置了searchBar.searchBarStyle = .minimal,取消按钮的颜色可能会和透明背景融合导致看不见。可以尝试切换为.prominent或.default样式,再配合颜色设置。
内容的提问来源于stack exchange,提问作者paul590
相关产品推荐
相关产品推荐

