在 iOS11 中更改 UISearchBar 背景图片

Posted

技术标签:

【中文标题】在 iOS11 中更改 UISearchBar 背景图片【英文标题】:Change UISearchBar background image in iOS11 【发布时间】:2018-01-11 09:07:18 【问题描述】:

我想更改我的 UISearchBar 背景图像。 在我的 UITableView 中将其添加为标题视图时,它工作得非常好。但是,当我想将 SearchBar 设置为 navigationItem 的 searchController 时,它不会更改背景图像。

我正在使用:

self.searchBar.searchBar.setBackgroundImage(UIImage(named: "#IMAGENAME")?.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch), for: .any, barMetrics: UIBarMetrics.default)

有人知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

您可能正在寻找这个:

if #available(ios 11.0, *) 
    let sc = UISearchController(searchResultsController: nil)
    if let navigationbar = self.navigationController?.navigationBar 
        navigationbar.barTintColor = UIColor(patternImage: UIImage(named: "pattern")!)
    
    navigationItem.searchController = sc
    navigationItem.hidesSearchBarWhenScrolling = false

这是图片:

结果如下:

如果您想更改搜索栏的任何其他 UI 元素,这里有更详细的答案。

iOS 11 UISearchBar in UINavigationBar

【讨论】:

非常感谢!这个答案我找了很久! 对于那些在导航栏中有搜索栏的人,请尝试替换:navigationItem.searchController = sc with -> navigationItem.titleView = sc.searchBar.【参考方案2】:

使用下面的代码我用过类似的代码:

// Objective-c 代码

[self.searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:[UIColor yourColor]] 
                                         forBarPosition:0 
                                             barMetrics:UIBarMetricsDefault];

// 斯威夫特代码

self.searchDisplayController.searchBar.setBackgroundImage(self.image(colo
r: UIColor.yourColor), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)

请告诉我结果

【讨论】:

Op 要求 UINavigationItem 中的 UISearchController,而不是弃用的 UISearchDisplayController。

以上是关于在 iOS11 中更改 UISearchBar 背景图片的主要内容,如果未能解决你的问题,请参考以下文章

如何更改UISearchBar中文本字段的位置

如何在iOS 7中更改文本UISearchBar的取消按钮颜色?

在 iOS 8 中更改 UISearchBar 取消按钮文本

如何在iOS7中更改UISearchBar的取消按钮的textColor?

如何在 iOS7 中更改 UISearchBar 的背景颜色

如何在iOS上更改UISearchBar组件的内部背景颜色