Swift:自定义UISearchBar圆角布局异常,需去除深灰色边角
解决UISearchBar自定义圆角后的深灰色边角问题
嘿,我之前也碰到过一模一样的问题!你看到的深灰色边角,其实是系统UISearchBar自带的默认背景在搞怪。你之前的代码只修改了输入框内部子视图的圆角,但外层的searchBar背景还没处理掉,所以才会露出那些奇怪的边角。
给你两个版本的解决方案,分别适配不同iOS版本:
方案1:兼容iOS 11+(含iOS13+)
// 先移除SearchBar的默认背景 searchController.searchBar.backgroundImage = UIImage() searchController.searchBar.searchBarStyle = .minimal if #available(iOS 13.0, *) { // iOS13及以上可以直接访问searchTextField,更安全 let searchTextField = searchController.searchBar.searchTextField // 设置输入框背景色和圆角 searchTextField.backgroundColor = .white // 换成你需要的背景色 searchTextField.layer.cornerRadius = 2 searchTextField.clipsToBounds = true // 可选:调整左侧搜索图标的颜色 if let leftIconView = searchTextField.leftView as? UIImageView { leftIconView.image = leftIconView.image?.withRenderingMode(.alwaysTemplate) leftIconView.tintColor = .darkGray } } else if #available(iOS 11.0, *) { // iOS11-12用valueForKey获取searchField(苹果一般不会因这个拒审) if let searchTextField = searchController.searchBar.value(forKey: "searchField") as? UITextField { searchTextField.backgroundColor = .white searchTextField.layer.cornerRadius = 2 searchTextField.clipsToBounds = true } }
为什么你的原代码不行?
你之前的代码只修改了textfield.subviews.first的圆角,但这个视图其实是输入框内部的一个容器层,而系统的UISearchBar本身还有一层深灰色的背景视图。我们通过设置backgroundImage = UIImage()和searchBarStyle = .minimal就能彻底移除这个默认背景,再直接给输入框本身设置圆角和背景色,就能完全消除那些深灰色边角了。
内容的提问来源于stack exchange,提问作者Farrukh Javeid
相关产品推荐
相关产品推荐

