iOS7,UISearchBar的backgroundImage

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

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

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是一种半透明的灰色。 当我按下取消时,searchBar backgroundImage又回来了。

看起来如何

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

编辑问题

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

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

在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) 

我能够复制你想要做的事情,如果我将barTintColor设置为我的颜色选择,它似乎对我barTintColor

我建议尝试:

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

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

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

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

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

由于没有当前的Swift版本,我将把它放在这里以备将来使用,因为我已经在很长一段时间里努力了。

  1. 获得所需颜色的1px图像(甚至清晰)

  2. 使用以下命令将其设置为backgroundImage:

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