7

我已经实现了一个搜索栏,我想更改搜索栏的颜色。我怎样才能做到这一点?

我试过:

self.mySearchBar.backgroundColor = [UIColor redColor];

但没有成功。

更新(已解决):

在使用以下代码定义背景颜色之前,我必须删除默认背景颜色。

for (UIView *subview in mySearchBar.subviews) {
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [subview removeFromSuperview];
        break;
    }
} 

...所以代码将是下一个:

  for (UIView *subview in mySearchBar.subviews) {
      if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
          [subview removeFromSuperview];
          break;
      }
  } 

  self.mySearchBar.backgroundColor = [UIColor redColor];
4

9 回答 9

29

尝试:

self.mySearchBar.barTintColor = [UIColor redColor];
于 2013-12-12T07:37:16.977 回答
6
self.mySearchBar.backgroundColor = [UIColor redColor]; 

什么都不会做

self.mySearchBar.tintColor = [UIColor redColor]; 

将要!

于 2013-01-19T11:11:11.030 回答
3
    self.mySearchBar.backgroundVolor = [UIColor redColor];

“Volor”或“Color”

  self.mySearchBar.backgroundColor = [UIColor redColor];

另外,如果您想对其进行着色:

根据文档:https://developer.apple.com/iphone/library/documentation/UIKit/Reference/UISearchBar_Class/Reference/Reference.html, UISearchBar 类上有一个 tintColor 属性。

在 TableSearch 示例中:https ://developer.apple.com/library/ios/#samplecode/TableSearch/搜索栏在 MainView.xib 中定义和加载。如果要更改其 tintColor 或样式,只需在 xib 中进行,它将被加载到应用程序中。

但是更改背景颜色的唯一真正方法是覆盖它,请查看以下问题的答案

UISearchBar 清除背景颜色或设置背景图片 [iphone sdk]

于 2012-05-10T11:28:40.423 回答
2

我不确定它自 iOS7 以来是否发生了变化,但似乎搜索显示控制器中的搜索栏需要一个额外的循环才能正确删除 UISearchBarBackground 视图。

我创建了一个递归方法来正确清理搜索栏。

- (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];
        }
    }
}

您可以简单地将搜索栏发送到该方法,然后更改颜色,有点像上面建议的答案。

[self removeUISearchBarBackgroundInViewHierarchy:self.searchDisplayController.searchBar];
self.searchDisplayController.searchBar.backgroundColor = yourUIColor;
于 2014-03-13T14:06:05.117 回答
2

我必须将 UISearchBar 设置searchBarStyle.default,否则没有任何效果。

于 2018-10-04T18:17:41.073 回答
1
searchBar.barTintColor =  UIColor.redColor()
于 2015-01-16T19:50:19.427 回答
0

试试这个代码,它对我来说很好。

for( UIView* v in [parent subviews] ) { 
if( [v isKindOfClass:[UISearchBar class]] ) {
  [(UISearchBar*)v  setTintColor:[UIColor blackColor]];
}
于 2012-05-10T11:30:50.763 回答
0

如果您对顶线和底线有疑问,请尝试删除 UISearchBarBackground:

self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 50)];

for (UIView *subview in self.searchBar.subviews) {
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [subview removeFromSuperview];
        break;
    }
    for (UIView *subsubview in subview.subviews) {
        if ([subsubview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
            [subsubview removeFromSuperview];
            break;
        }
    }
}

self.searchBar.barTintColor = [UIColor redColor];
self.searchBar.backgroundColor = [UIColor redColor];
于 2015-10-22T16:21:14.767 回答
0

取决于你到底要改变什么

searchBar.barTintColor
searchBar.tintColor

您可以自定义的其他项目包括一些额外的代码

于 2021-10-08T14:12:13.317 回答