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中,属性backgroundImage
和scopeBarBackgroundImage
不再按预期工作并变为半透明。
iOS 7中引入了以下方法来解决此问题。 (文件在这里 )
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)
我能够复制你想要做的事情,如果我将barTintColor
设置为我的颜色选择,它似乎对我barTintColor
。
我建议尝试:
self.searchDisplayController.searchBar.barTintColor = [UIColor myBGColor];
我做了[UIColor redColor]
并得到了我预期的结果。
如果设置搜索栏的barTintColor
属性,您将获得所期望的内容。 我刚试过这个并且它有效:
self.searchDisplayController.searchBar.barTintColor = [UIColor yellowColor];
请记住, barTintColor
属性是在iOS 7中引入的。
由于没有当前的Swift版本,我将把它放在这里以备将来使用,因为我已经在很长一段时间里努力了。
-
获得所需颜色的1px图像(甚至清晰)
-
使用以下命令将其设置为backgroundImage:
searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)