我正在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又回来了。
/////////////////////////////////////////////// ////////////////////////////////////////////////// ////
编辑问题
/////////////////////////////////////////////// ////////////////////////////////////////////////// ////
实际上,我确实在这里和那里使用了barTintColor和其他选项,但它不起作用。这是barTintColor设置为相同颜色的结果。但是顶部有这个白色层
答案 0 :(得分:40)
在iOS 7中,属性backgroundImage
和scopeBarBackgroundImage
不再按预期工作,变得半透明。
iOS 7中引入了以下方法来解决此问题。 (文档here)
setBackgroundImage:forBarPosition:barMetrics:
这是你应该做的:
[self.searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:[UIColor yourColor]]
forBarPosition:0
barMetrics:UIBarMetricsDefault];
此处barPosition : 0
为UIBarPositionAny
。
编辑:
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版本,我将把它留在这里以备将来使用,因为我已经在很长一段时间内努力了。
获得所需颜色的1px图像(甚至清晰)
使用以下方法将其设置为backgroundImage:
searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)