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

时间:2016-04-12 14:19:04

标签: ios swift icons uisearchbar magnify

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

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

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

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

对于放大图标位置,我希望它在左侧,如果我激活UISearchBar则显示它。

enter image description here

enter image description here

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

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

enter image description here

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

enter image description here

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

3 个答案:

答案 0 :(得分:4)

您可以使用

调整搜索栏图标的位置
func positionAdjustmentForSearchBarIcon(_ icon: UISearchBarIcon) -> UIOffset

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

答案 1 :(得分:2)

@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,并为色调添加了自定义水平偏移。

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

enter image description here

enter image description here

答案 2 :(得分:0)

您可以使用:

uiSearchBar.setPositionAdjustment(UIOffset, for: UISearchBar.Icon)

UIOffset替换为所需的偏移值UIOffset(horizontal: CGFloatvertical: CGFloat),将UISearchBar.Icon替换为.search