无法在 iOS 8 中将搜索栏色调更改为透明

Posted

技术标签:

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

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

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

也以编程方式尝试过:

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

还是黑的:(

有什么想法吗?

【问题讨论】:

我想你想设置barTintColor。 您希望搜索栏的背景清晰,还是搜索栏的文本字段背景清晰? 搜索栏背景 - 周围的橙色矩形 - 见下文 你看到下面我回答的第二部分了吗,我在哪里说清楚了? 今晚我会尝试并编辑我的评论... 【参考方案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 设置为清除颜色。

【讨论】:

以上是关于无法在 iOS 8 中将搜索栏色调更改为透明的主要内容,如果未能解决你的问题,请参考以下文章

无法将状态栏颜色更改为半透明黑色 [重复]

在我的导航栏 iOS 7 中设置色调/半透明级别的问题

你如何制作一个彩色和半透明的导航栏(iOS)?

当用户在表格视图中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色

iPhone SDK 3.0 应用内电子邮件 - 更改导航栏色调颜色

在 Swift iOS 8 中设置透明导航栏和状态栏的图像底图