无法在 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 中将搜索栏色调更改为透明的主要内容,如果未能解决你的问题,请参考以下文章
当用户在表格视图中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色