【问题标题】:How to clear UISearchBar background color in iOS10 Swift?如何在 iOS10 Swift 中清除 UISearchBar 背景颜色?
【发布时间】:2017-02-14 03:11:11
【问题描述】:

由于 UISearchBar 中的布局更改,旧版本的 iOS 不再适用此问题的旧版本。

我尝试了以下方法来完全删除 UISearchBar 的背景颜色,但它不起作用。 (我试图查找它的层次结构视图,但 xCode 一直因为这个选项而崩溃。)

private func clearBackgroundColor() {
    for view in self.subviews {
        view.backgroundColor = UIColor.clear
        for subview in view.subviews {
            subview.backgroundColor = UIColor.clear
        }
    }
} 

有什么想法或建议吗?

谢谢!!

【问题讨论】:

  • 你在ViewDidLayoutSubviews()中调用了这个函数吗?
  • @Lumialxk 不,UISearchBar 没有这个方法。我从初始化中调用它。

标签: ios swift uisearchbar ios10


【解决方案1】:
private func clearBackgroundColor() {
    guard let UISearchBarBackground: AnyClass = NSClassFromString("UISearchBarBackground") else { return }

    for view in self.subviews {
        for subview in view.subviews where subview.isKind(of: UISearchBarBackground) {
            subview.alpha = 0
        }
    }
}

这就是我最后所做的。谢谢大家的回答。

【讨论】:

  • 作为对未来流浪者的评论...这适用于 Xcode 9、Swift 3.0(尚未使用 4.0,不想破坏我的生产代码)@Lumialxk 的回答无效。
  • @QuantumHoneybees for iOS 11 您需要在内容视图中进行迭代。 searchBar.subviews.first?.subviews 而不是 searchBar.subviews
  • @QuantumHoneybees 这个解决方案也适用于 iOS 12.4。我不知道你是怎么做到的,作为uiview的扩展添加时效果很好。
【解决方案2】:

我想你提到了搜索栏的 BarTintColor

试试这个:

searchBar.barTintColor = .white

【讨论】:

  • 谢谢。但我需要将它设置为 UIColor.clear。在我将其设置为清除后,它实际上在屏幕上显示为黑色。我需要此搜索栏中的所有内容都具有透明颜色,仅文本输入除外。
  • UIColor.clear 显示搜索栏后面的视图颜色。所以我认为你的 searchBar 的背景颜色背后的视图是黑色的
【解决方案3】:

试试这个。

class CustomSearchBar: UISearchBar {
    override func layoutSubviews() {
        super.layoutSubviews()
        clearBackgroundColor() // function in the question
    }
}

private func clearBackgroundColor() {
    for view in self.subviews {
        view.backgroundColor = UIColor.clear
        for subview in view.subviews {
            subview.backgroundColor = UIColor.clear
        }
    }
} 

【讨论】:

  • 谢谢,在我的xCode“View Hierarchy”功能起作用后,我去了另一个方向,基本上检查了布局内的所有名称。
【解决方案4】:

尝试设置背景图片: [searchBar setBackgroundImage:[UIImage new]];

【讨论】:

    【解决方案5】:

    只需在界面生成器或代码中将搜索栏样式设置为.Minimal,背景就会变为透明。

    【讨论】:

      【解决方案6】:
      let searchBar = UISearchBar()
      searchBar.backgroundImage = UIImage()
      

      【讨论】:

        【解决方案7】:

        您可以在界面生成器中将搜索样式更改为“最小”

        【讨论】:

          猜你喜欢
          • 2011-01-09
          • 1970-01-01
          • 2015-05-30
          • 1970-01-01
          • 1970-01-01
          • 2012-06-06
          • 2013-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多