5

我有一个 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 的高度),则背景显示正常,但我无法再输入,因为似乎整个文本字段都被向上推了。我还尝试将 SearchText 的垂直偏移更改为 44 以进行补偿,但没有运气。老实说,我不确定搜索文本和背景偏移应该做什么,但我决定试一试。

在此处输入图像描述

有没有办法做到这一点?或者也许是不同的方法?

4

3 回答 3

6

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

func positionAdjustmentForSearchBarIcon(_ icon: UISearchBarIcon) -> UIOffset

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

于 2016-04-12T14:24:42.760 回答
2

您可以使用:

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

替换为您想要的UIOffset偏移值UIOffset(horizontal: CGFloatvertical: CGFloat)UISearchBar.Icon.search

于 2020-11-01T07:07:47.010 回答
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,并为色调添加了一个自定义的水平偏移量。

我敢肯定,这不是最好的解决方案,但现在它可以工作。

在此处输入图像描述

在此处输入图像描述

于 2016-04-13T09:45:32.027 回答