25

我正在 iOS 6 和 iOS 7 之间转换 UI。

我们有一个与 UISearchDisplayController 相关的 UISearchBar,我将 navigationBar 和 searchBar 的 backgroundImage 设置为使用颜色动态创建的 1x1 图像。

self.searchDisplayController.searchBar.translucent = NO;
self.searchDisplayController.searchBar.barTintColor = [UIColor clearColor];
self.searchDisplayController.searchBar.tintColor = [UIColor myTintColor];
self.searchDisplayController.searchBar.backgroundImage = [self imageWithColor:[UIColor myBGColor]];
self.searchDisplayController.searchBar.scopeBarBackgroundImage = [self imageWithColor:[UIColor myBGColor]];

在 iOS6 上,一切都按预期工作。在 iOS7 上,当 searchBar 被选中时,scopeBar 出现了很好的 backgroundImage(用 searchBar.scopeBarBackgroundImage 设置)但是 searchBar 是一种半透明的灰色。当我按下 Cancel 时,searchBar backgroundImage 又回来了。

它看起来如何

///////////////////////////////////////// ///////////////////////////////////////// /

编辑问题

///////////////////////////////////////// ///////////////////////////////////////// /

实际上,我确实在这里和那里使用了 barTintColor 和其他选项,但它不起作用。这就是 barTintColor 设置为相同颜色的结果。但是上面有这个白色层 在此处输入图像描述

4

4 回答 4

41

在 iOS 7 中,这些属性不再按预期工作而变得半透明backgroundImagescopeBarBackgroundImage

iOS 7 中引入了以下方法来解决此问题。(这里的文档)

setBackgroundImage:forBarPosition:barMetrics:

这是你应该做的:

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

这里,barPosition : 0UIBarPositionAny

编辑:

SWIFT代码:

self.searchDisplayController.searchBar.setBackgroundImage(self.image(color: UIColor.yourColor), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)
于 2013-11-14T11:22:06.870 回答
4

我能够复制您尝试做的事情,如果我将其设置barTintColor为我的颜色选择,它似乎对我有用。

我建议尝试:

self.searchDisplayController.searchBar.barTintColor = [UIColor myBGColor];

我做到[UIColor redColor]了,并得到了我预期的结果。

于 2013-11-14T11:20:21.897 回答
0

如果您设置barTintColor搜索栏的属性,您将得到您所期望的。我刚刚尝试过这个并且它有效:

self.searchDisplayController.searchBar.barTintColor = [UIColor yellowColor];

请记住,barTintColor属性是在 iOS 7 中引入的。

于 2013-11-14T11:31:46.913 回答
0

由于没有当前的 Swift 版本,我将把它留在这里以备将来使用,因为我也一直在努力解决它很长一段时间。

  1. 让自己拥有所需颜色的 1px 图像(甚至清晰)

  2. 使用以下方法将其设置为 backgroundImage:

    searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)

于 2018-04-16T07:13:36.007 回答