【问题标题】:Change UISearchBar background image in iOS11在 iOS11 中更改 UISearchBar 背景图片
【发布时间】: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)

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

【问题讨论】:

    标签: ios swift uitableview uisearchbar uisearchcontroller


    【解决方案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 元素,这里有更详细的答案。

    【讨论】:

    • 非常感谢!这个答案我找了很久!
    • 对于那些在导航栏中有搜索栏的人,请尝试替换: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。