设置UISearchBar的cornerRadius?

3

我想要改变UISearchbar的cornerRadius属性,但是没有起作用。我尝试了以下代码:

if let textfield = searchBar.value(forKey: "searchField") as? UITextField {
        textfield.textColor = Color.text.primary // this is working
        if let backgroundView = textfield.subviews.first {
            backgroundView.layer.cornerRadius = 2 // not working
            backgroundView.clipsToBounds = true
        }
    }

有什么想法吗?如果我将backgroundView设置为另一种颜色,它会按预期工作(因此BackgroundView在这里)。
1个回答

5

看起来背景视图有自定义渲染代码,强制使用圆角。您可以尝试隐藏该视图,并手动配置文本字段以达到相同的效果。

if let textField = self.searchBar.subviews.first?.subviews.flatMap({ $0 as? UITextField }).first {
    textField.subviews.first?.isHidden = true
    textField.textColor = Color.text.primary
    textField.layer.backgroundColor = UIColor.white.cgColor
    textField.layer.cornerRadius = 2
    textField.layer.masksToBounds = true
}

请注意,如果苹果决定更改UISearchBar文本字段的结构方式,这可能会在未来的iOS版本中出现错误。
编辑后不使用value(forKey:)

永远不要使用私有API!您可以尝试遍历子视图并查找要设置圆角的UITextField(这种方法可能会在未来的iOS版本中失效,但更加稳健)。 - borchero
这并没有使用私有API,因为没有直接引用苹果的私有类。但我同意更好的解决方案是搜索子视图以查找UITextField - Samah
谢谢,它运行良好 - 所以现在应该可以不使用任何私有API或(因为您只检查文本字段),是吗? - derdida
应该没问题。我很确定苹果只会检查对私有函数和类的直接调用。 - Samah

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