【发布时间】:2018-01-22 08:53:25
【问题描述】:
我正在为我的UITableView 实现一个UISearchController,但我正在为 iOS 11 的自定义而苦苦挣扎。我的导航栏正在使用我希望搜索控制器匹配的渐变图像背景,但我没有t 找到了为UISearchController 设置背景图像的方法。它作为 TableHeaderView 在 UISearchController 上完美运行,但在 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
}
}
【问题讨论】:
-
什么是 Color.blue.gradient?
-
很久以前,但我相信我使用了自定义颜色类。我认为 Color.blue.gradient 的类型是
CAGradientLayer
标签: swift uinavigationcontroller uisearchcontroller