我现在已经挣扎了一段时间。已经到处搜索,但提供的解决方案仅适用于objective-c。其中包含
UITextField *txt = [_searchBar valueForKey:@"_searchField"];
虽然有人可能会说这是受保护的API,Apple可能拒绝使用此类代码的应用程序。
所以,现在我已经尝试了很多方法来解决这个问题,而且根本没有工作。 我的代码是这样的:
searchBar = UISearchBar(frame: CGRectMake(0, 0, 320.0, 30.0))
searchBar.autoresizingMask = UIViewAutoresizing.FlexibleWidth
searchBar.searchBarStyle = UISearchBarStyle.Minimal
searchBar.layer.cornerRadius = 15
searchBar.delegate = self
searchBar.backgroundColor = UIColor.whiteColor()
if floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1{
// Load resources for iOS 6.1 or earlier
searchBar.placeholder = "Search";
} else {
// The following "hack" (if we can call that) breaks the UI for different size devices.
// Load resources for iOS 7 or later
searchBar.placeholder = "Search ";
}
这给了我奇怪的结果:
虽然我想要的只是UISearchBar里面的文本字段有白色背景而SearchBar本身的cornerRadius比如15。
我该怎么做?
非常感谢
答案 0 :(得分:27)
您必须访问UISearchBar中的UITextField。你可以做到这一点
使用valueForKey("searchField")
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
textFieldInsideSearchBar?.backgroundColor = backgroundColor
...
您可以更改任何参数,如UITextField的textColor或backgroundColor
答案 1 :(得分:14)
在Swift 3中:
if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
txfSearchField.borderStyle = .none
txfSearchField.backgroundColor = .lightGray
}
答案 2 :(得分:9)
添加上述答案。 如果要保持搜索栏样式UISearchBarStyleMinimal并更改UISearchBar的textField的背景,请将textField的borderStyle设置为UITextBorderStyleNone
目标C:
<table>
<tr>
<td> data[0,0] </td>
<td> data[0,1] </td>
...
</tr>
<tr>
<td> data[1,0] </td>
<td> data[1,1] </td>
...
</tr>
...
</table>
答案 3 :(得分:0)
雨燕5
searchBar.searchTextField.backgroundColor = .white
您可以直接更改文本字段背景的颜色。
答案 4 :(得分:0)
searchController.searchBar.searchTextField.backgroundColor = UIColor.white searchController.searchBar.searchTextField.textColor = UIColor.black
答案 5 :(得分:0)
我不确定为什么每个人都为此主题写过一篇文章。解决方案只有两行:
extension UISearchBar {
func clearBackground() {
backgroundImage = UIImage() // Background cleared.
searchBarStyle = .prominent // Prominent ONLY for clear background.
searchTextField.backgroundColor = .clear
}
}
答案 6 :(得分:-1)
向UISearchBar
添加扩展名以访问其UITextField
:
import UIKit
extension UISearchBar {
var textField: UITextField? {
let subViews = subviews.flatMap { $0.subviews }
return (subViews.filter { $0 is UITextField }).first as? UITextField
}
}
然后,您可以根据需要设置其属性:
searchController.searchBar.textField?.backgroundColor = .red
searchController.searchBar.textField?.tintColor = .yellow