如何在iOS10 Swift中清除UISearchBar的背景颜色?

5

由于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
@Lumialxk 不,UISearchBar没有这个方法。我是从初始化中调用它的。 - RainCast
7个回答

13
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**的答案无效。 - JoeVictor
对于 iOS 11,您需要在内容视图中迭代。使用searchBar.subviews.first?.subviews而不是searchBar.subviews - btype
1
@QuantumHoneybees 这个解决方案也适用于iOS 12.4。我不知道你是怎么做到的,但当作为UIview的扩展添加时,它可以很好地工作。 - Anuran Barman

5

我想你是在提到搜索栏的BarTintColor。

尝试以下代码:

searchBar.barTintColor = .white

2
谢谢。但问题是我需要将它设置为UIColor.clear。在我将其设置为clear之后,它实际上在屏幕上显示为黑色。我需要搜索栏内的所有内容都具有透明颜色,除了文本输入之外。 - RainCast
1
UIColor.clear 会显示出搜索栏背后视图的颜色。因此,我认为搜索栏背后的背景颜色是黑色。 - Nguyễn Anh Việt

3
只需在Interface Builder或代码中将搜索栏样式设置为.Minimal,背景就会变为透明。

enter image description here


2

试试这个。

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“视图层次结构”功能可用后,我选择了另一种方向,基本上检查了布局中的所有名称。 - RainCast

1

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


1
let searchBar = UISearchBar()
searchBar.backgroundImage = UIImage()

0
您可以在 Interface Builder 中将搜索样式更改为“Minimal”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接