iOS7,UISearchBar的backgroundImage

时间:2013-11-12 11:09:23

标签: ios ios7 uikit transition searchbar

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

我们有一个与UISearchDisplayController相关的UISearchBar,我已经将navigationBar的backgroundImage和searchBar设置为用颜色动态创建的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是一种半透明的灰色。当我按下取消时,searchBar backgroundImage又回来了。

How it looks

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

编辑问题

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

实际上,我确实在这里和那里使用了barTintColor和其他选项,但它不起作用。这是barTintColor设置为相同颜色的结果。但是顶部有这个白色层 enter image description here

4 个答案:

答案 0 :(得分:40)

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

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

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)

答案 1 :(得分:4)

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

我建议尝试:

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

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

答案 2 :(得分:0)

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

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

请注意,iOS 7中引入了barTintColor属性。

答案 3 :(得分:0)

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

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

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

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