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

如何通过自定义类代码定制UISearchBar 并放大内置搜索图标

UISearchBar自定义图标放大解决方案

核心修改逻辑

  • 通过CGAffineTransform对图标视图进行缩放,快速调整图标大小
  • 调整leftView的frame尺寸,确保放大后的图标有足够的显示空间
  • 调整输入框内边距,避免图标和输入文本重叠
  • 若系统图标放大后出现模糊,可直接替换为自定义的高清大尺寸图标

修改后完整代码

class SearchBar: UISearchBar {
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.frame = frame
        self.layer.borderColor = UIColor.purple.cgColor
        self.layer.borderWidth = 2
        self.layer.cornerRadius = 6
        self.searchTextField.backgroundColor = .clear
        self.showsBookmarkButton = false
        self.showsCancelButton = false
        self.semanticContentAttribute = .forceRightToLeft
        
        // iOS13+ 可直接使用self.searchTextField,无需KVC取值,稳定性更高
        guard let glassIconView = self.searchTextField.leftView as? UIImageView else {
            return
        }
        // 1.5为缩放倍数,可根据需求自行调整
        glassIconView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
        // 如需替换自定义图标,可取消注释下行代码,替换为自己的图标资源
        // glassIconView.image = UIImage(named: "custom_search_icon")?.withRenderingMode(.alwaysTemplate)
        glassIconView.image = glassIconView.image?.withRenderingMode(.alwaysTemplate)
        glassIconView.backgroundColor = .red
        
        // 调整图标容器尺寸,适配放大后的图标
        self.searchTextField.leftView?.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        // 调整图标与输入文本的间距,避免重叠
        self.searchTextField.setLeftViewOffset(8)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

内容的提问来源于stack exchange,提问作者iNeonFox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:45:08