【问题标题】:Can't change search bar tint color to be transparent in iOS 8无法在 iOS 8 中将搜索栏色调更改为透明
【发布时间】:2014-09-26 17:02:15
【问题描述】:

从 Xcode 5 升级到 6,现在我的搜索栏颜色是黑色的。

试图通过故事板右窗格>“Bar Tint”更改它以清除颜色,但它仍然是黑色。

也以编程方式尝试过:

[self.searchBar setTintColor:[UIColor clearColor]];

还是黑的:(

有什么想法吗?

【问题讨论】:

  • 我想你想设置barTintColor
  • 您希望搜索栏的背景清晰,还是搜索栏的文本字段背景清晰?
  • 搜索栏背景 - 周围的橙色矩形 - 见下文
  • 你看到下面我回答的第二部分了吗,我在哪里说清楚了?
  • 今晚我会尝试并编辑我的评论...

标签: ios iphone ios8 uisearchbar searchbar


【解决方案1】:

搜索栏上的tintColor 属性与 UINavigationBar 非常相似,它更改按钮的颜色,以及更改闪烁光标的颜色,而不是实际的搜索栏背景。您要使用的是barTintColor 属性。

searchbar.barTintColor = [UIColor orangeColor];
searchbar.tintColor = [UIColor greenColor];

产生以下丑陋但信息丰富的结果:

如果你想要一个完全透明的搜索栏,你还需要设置背景图片:

searchbar.barTintColor = [UIColor clearColor];
searchbar.backgroundImage = [UIImage new];

编辑:我强烈建议不要遍历和修改 任何 UIKit 对象的子视图,正如其他答案中所建议的那样。来自 Apple 的文档:

对于在 UIKit 和其他系统框架中声明的复杂视图,任何 视图的子视图通常被认为是私有的并且受制于 随时改变。因此,您不应尝试检索或 修改这些类型的系统提供的视图的子视图。如果你这样做, 您的代码可能会在未来的系统更新期间中断。

https://developer.apple.com/documentation/uikit/uiview/1622614-subviews

【讨论】:

  • searchbar.barTintColor = [UIColor orangeColor];使它变成橙色,但是当使用 [UIColor clearColor] 时,由于某种奇怪的原因它仍然是黑色
  • 看我的编辑,你需要改变背景视图。
  • 对于那些仍然有这个问题的人,我实际上不得不设置 searchBar.scopeBarBackgroundImage = [UIImage new];也是。
  • 做得很好 - 让我免于子类化,我同意在所有条件相同的情况下删除视图是个坏主意,因为无法知道未来的后果会是什么。
  • 对我来说没有用。所以我把它放在搜索栏下面的一个uiview,它有我想要的颜色然后我让搜索栏透明(栏色调和背景颜色)。
【解决方案2】:

我必须以这种方式使用 Swift 2.0 在 iOS 9 上更改它:

    let image = UIImage()

    searchBar.setBackgroundImage(image, forBarPosition: .Any, barMetrics: .Default)
    searchBar.scopeBarBackgroundImage = image

【讨论】:

  • 很好的解决方案。需要注意的是,这个解决方案只有在 searBar 是半透明的情况下才有效。
【解决方案3】:

在 Swift 3 上:

将 searchBar 的背景设置为空图像:

    searchBar.setBackgroundImage(image, for: .any, barMetrics: .default)
    searchBar.scopeBarBackgroundImage = image

【讨论】:

    【解决方案4】:

    以编程方式更改搜索栏色调:

        if let textfield = searchBar.value(forKey: "searchField") as? UITextField {
            textfield.textColor = #colorLiteral(red: 0.3921568627, green: 0.3921568627, blue: 0.3921568627, alpha: 1)
            textfield.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
        }
    

    故事板:

    【讨论】:

      【解决方案5】:

      我在 iOS8 / XCode 6 上也看到了这个问题。我没有让搜索栏半透明。清除颜色的 searchbar.barTintColor 或 searchbar.tintColor 设置没有帮助或显示黑色搜索栏。

      我发现的唯一解决方法是设置半透明背景 png 图像 (alpha=0.0) 并将 searchbar.barTintColor 设置为清除颜色。

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        • 2013-09-22
        • 1970-01-01
        • 2014-07-16
        • 2016-05-29
        • 2011-03-29
        相关资源
        最近更新 更多