我正在尝试设置没有半透明的UISearchBar
的barTintColor
。但是,设置translucent
属性似乎没有任何作用。我在这里的一个简单的Xcode项目中复制了这个问题。
self.searchDisplayController.searchBar.translucent = NO;
self.searchDisplayController.searchBar.barTintColor = [UIColor redColor];
上面的红色与不半透明的UIViews
中的[UIColor redColor]
不同。我知道在搜索栏上设置背景图像的解决方法,但上面的代码应该也能工作。
我下载了您的代码并找到了的解决方案,添加了一个方法名为removeUISearchBarBackgroundInViewHierarchy
,并将searchBar.backgroundColor
设置为redColor.
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchDisplayController.searchBar.translucent = NO;
[self removeUISearchBarBackgroundInViewHierarchy:self.searchDisplayController.searchBar];
self.searchDisplayController.searchBar.backgroundColor = [UIColor redColor];
}
- (void) removeUISearchBarBackgroundInViewHierarchy:(UIView *)view
{
for (UIView *subview in [view subviews]) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
break; //To avoid an extra loop as there is only one UISearchBarBackground
} else {
[self removeUISearchBarBackgroundInViewHierarchy:subview];
}
}
}
请在搜索栏中这样设置图像,这样可以解决您的问题。
[[UISearchBar appearance] setBackgroundImage:[UIImage imageNamed:@"red"]];
谢谢。
对于派对来说可能为时已晚,
然而,我为Swift 3做了一个非常简单而漂亮的扩展,它允许您毫无问题地使用半透明属性。
它不涉及在对象内使用私有API或危险的演练。
你可以从这个Github存储库下载它。