如何通过自定义类代码定制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
相关产品推荐
相关产品推荐

