更改UISearchBar放大图标颜色和位置

我有一个UISearchBar,我想改变初始放大图标(出现在UISearchBar中间的图标)的位置以及颜色或图标。

到目前为止,我改变了色调和图标图像。

但是,只有当我在模拟器上测试应用程序但在实际设备上(都运行iOS 9.3)时,新图标才会显示,它仍会显示默认图标。

UISearchBar.appearance().setImage(UIImage(named: "SearchbarIcon"), forSearchBarIcon: UISearchBarIcon.Search, state: UIControlState.Normal) 

至于放大图标位置,我希望它在左侧,如果我激活UISearchBar它会出现。

在此处输入图像描述

在此处输入图像描述

我在这里找到了很多答案,许多提供的解决方案在iOS 8.0+上都不起作用,或者在Objective-C中,我在理解它们时遇到了一些问题。

我尝试添加一个包含图标的自定义背景,但当图标仍然存在时,它会显示在搜索栏的底部:

在此处输入图像描述

如果我将Y的背景偏移更改为-44(UISearchBar的高度),则背景显示OK但我无法再键入,因为看起来整个文本字段都被向上推。 我还尝试将SearchText的垂直偏移更改为44以补偿但没有运气。 说实话,我不确定搜索文本和背景偏移应该做什么,但我决定尝试一下。

在此处输入图像描述

有没有办法实现这个目标? 或者可能采用不同的方法?

您可以使用调整搜索栏图标的位置

 func positionAdjustmentForSearchBarIcon(_ icon: UISearchBarIcon) -> UIOffset 

请参阅https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchBar_Class/#//apple_ref/occ/instm/UISearchBar/positionAdjustmentForSearchBarIcon :

@Michael – 感谢您的帮助。 我设法抓住了UISearchBar的UITextField:

 func customizeSearchBar() { for subview in srcRegimenSearchBar.subviews { for view in subview.subviews { if let searchField = view as? UITextField { let imageView = UIImageView() let image = UIImage(named: "SearchBarIcon.png") imageView.image = image; imageView.frame = CGRectMake(0, 0, 0, 0) /*imageView.frame = CGRectMake(100, 0, 20, 19)*/ searchField.leftView = imageView searchField.leftViewMode = UITextFieldViewMode.Always } } } } 

我想改变位置,因为我可以访问框架,但似乎只有顶部和高度可以修改,至少我尝试的方式所以我将高度和宽度设置为0(我找不到办法把它弄为零或完全删除它然后我在UISearchbar的左侧添加了一个带有新图标的UIImageView,并为色调添加了一个自定义的水平偏移。

不是那里最好的解决方案,我很确定,但是现在它可行。

在此处输入图像描述

在此处输入图像描述