【问题标题】:Change UISearchBar magnify icon color and position更改 UISearchBar 放大图标颜色和位置
【发布时间】:2016-08-03 05:30:17
【问题描述】:

我有一个 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 以进行补偿,但没有运气。老实说,我不确定搜索文本和背景偏移应该做什么,但我决定试一试。

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

【问题讨论】:

    标签: ios swift icons uisearchbar magnify


    【解决方案1】:

    你可以使用:

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

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

    【讨论】:

      【解决方案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,并为色调添加了一个自定义的水平偏移量。

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

      【讨论】:

        【解决方案3】:

        您可以使用

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

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

        【讨论】:

        • 谢谢。但据我了解,这会改变您开始输入时显示的图标的位置,而不是初始搜索图标的位置。像这样的东西。 self.srcRegimenSearchBar.setPositionAdjustment(UIOffset(horizo​​ntal: 0, vertical: 0), forSearchBarIcon: UISearchBarIcon.Search) 我有兴趣改变图标在搜索栏中间的位置。
        • 啊,我明白了。好吧,在过去,当 UISearchBar 的可配置性要低得多时,我通过迭代它的子视图并找到它包含的 UITextField 并成为它的委托来插入我自己的代码。这使您可以访问许多定位回调。 developer.apple.com/library/ios/documentation/UIKit/Reference/…
        • 操作错误。即使处于非活动状态,这也会改变 searchBar 的子视图的偏移量。谢谢你,迈克尔。这是我第一次知道这件事。 :D 帮了我很多。
        • 是的,这是正确的做法。 Swift 5 版本示例:searchController.setPositionAdjustment(UIOffset(horizo​​ntal: 10, vertical: 0), for: UISearchBar.Icon.search)
        猜你喜欢
        • 2016-04-01
        • 2012-08-03
        • 2015-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多