You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:29:07