在 UISearchController 上使用背景图片 iOS 11
Use background image on UISearchController iOS 11
我正在为我的 UITableView
实现 UISearchController
,但我正在为 iOS 11 的自定义而苦苦挣扎。我的导航栏正在使用我想要的渐变图像背景匹配的搜索控制器,但我还没有找到为 UISearchController
设置背景图像的方法。它在 UISearchController 上作为 TableHeaderView 完美运行,但在 iOS 11 中几乎没有任何自定义传递。
当前结果:
期望的结果:
这是我正在使用的代码: (在 viewDidLoad 上调用)
private func setupSearchController() {
let searchController = UISearchController(searchResultsController: nil)
// Convert CAGradientLayer to UIImage
let gradient = Color.blue.gradient
gradient.frame = searchController.searchBar.bounds
UIGraphicsBeginImageContext(gradient.bounds.size)
gradient.render(in: UIGraphicsGetCurrentContext()!)
let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Setup the Search Controller
searchController.searchBar.backgroundImage = gradientImage
searchController.searchBar.isTranslucent = false
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search by transaction name"
searchController.searchBar.tintColor = Color.custom(hexString: "FAFAFA", alpha: 1).value
definesPresentationContext = true
searchController.searchBar.delegate = self
// Implement Search Controller
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
navigationController?.navigationBar.setBackgroundImage(gradientImage, for: .default)
} else {
tableView.tableHeaderView = searchController.searchBar
}
}
您可以为此添加一个 CustomView。
使用 CustomView 将您的 searchBar 添加到其中,然后将此 customView 添加到您的 ViewController。
现在你可以轻松的将这个customView的背景设置为:
//if customView is named as customView
let backgroundImage = UIImageView(frame: UIScreen.mainScreen().bounds)
backgroundImage.image = UIImage(named: "background.png")
self.customView.insertSubview(backgroundImage, atIndex: 0)
多亏了,我在搜索了一段时间后找到了一个不错的解决方案。
这就是我为 iOS 11 实现背景图像的方式:
// Implement Search Controller
if #available(iOS 11.0, *) {
if let navigationBar = self.navigationController?.navigationBar {
navigationBar.barTintColor = UIColor(patternImage: gradientImage!)
}
if let textField = searchController.searchBar.value(forKey: "searchField") as? UITextField {
if let backgroundview = textField.subviews.first {
backgroundview.backgroundColor = UIColor.white
backgroundview.layer.cornerRadius = 10;
backgroundview.clipsToBounds = true;
}
}
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
tableView.tableHeaderView = searchController.searchBar
}
我正在为我的 UITableView
实现 UISearchController
,但我正在为 iOS 11 的自定义而苦苦挣扎。我的导航栏正在使用我想要的渐变图像背景匹配的搜索控制器,但我还没有找到为 UISearchController
设置背景图像的方法。它在 UISearchController 上作为 TableHeaderView 完美运行,但在 iOS 11 中几乎没有任何自定义传递。
当前结果:
期望的结果:
这是我正在使用的代码: (在 viewDidLoad 上调用)
private func setupSearchController() {
let searchController = UISearchController(searchResultsController: nil)
// Convert CAGradientLayer to UIImage
let gradient = Color.blue.gradient
gradient.frame = searchController.searchBar.bounds
UIGraphicsBeginImageContext(gradient.bounds.size)
gradient.render(in: UIGraphicsGetCurrentContext()!)
let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Setup the Search Controller
searchController.searchBar.backgroundImage = gradientImage
searchController.searchBar.isTranslucent = false
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search by transaction name"
searchController.searchBar.tintColor = Color.custom(hexString: "FAFAFA", alpha: 1).value
definesPresentationContext = true
searchController.searchBar.delegate = self
// Implement Search Controller
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
navigationController?.navigationBar.setBackgroundImage(gradientImage, for: .default)
} else {
tableView.tableHeaderView = searchController.searchBar
}
}
您可以为此添加一个 CustomView。 使用 CustomView 将您的 searchBar 添加到其中,然后将此 customView 添加到您的 ViewController。 现在你可以轻松的将这个customView的背景设置为:
//if customView is named as customView
let backgroundImage = UIImageView(frame: UIScreen.mainScreen().bounds)
backgroundImage.image = UIImage(named: "background.png")
self.customView.insertSubview(backgroundImage, atIndex: 0)
多亏了
这就是我为 iOS 11 实现背景图像的方式:
// Implement Search Controller
if #available(iOS 11.0, *) {
if let navigationBar = self.navigationController?.navigationBar {
navigationBar.barTintColor = UIColor(patternImage: gradientImage!)
}
if let textField = searchController.searchBar.value(forKey: "searchField") as? UITextField {
if let backgroundview = textField.subviews.first {
backgroundview.backgroundColor = UIColor.white
backgroundview.layer.cornerRadius = 10;
backgroundview.clipsToBounds = true;
}
}
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
tableView.tableHeaderView = searchController.searchBar
}