UISearchBar Minimal Style在打字时使色调变黑

时间:2014-04-04 06:06:43

标签: ios objective-c uisearchbar

当我在iOS7中将UISearchBar设置为minimal style时,当我选择它时,色调变为黑色,并且文字无法读取,因为黑色为黑色。

这不会产生预期的结果。选择时,色调仍然是黑色......

if(floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
{
    // set bar style
    _sendToSearchBar.barStyle = UIBarStyleDefault;
    // set bar transparancy
    _sendToSearchBar.translucent = NO;
    // set bar color
    _sendToSearchBar.barTintColor = [UIColor whiteColor];
    // set bar button color
    _sendToSearchBar.tintColor = [UIColor whiteColor];
    // set bar background color
    _sendToSearchBar.backgroundColor = [UIColor whiteColor];
}

enter image description here

7 个答案:

答案 0 :(得分:13)

我有同样的问题,并尝试了几个小时,结论是UISearchBar是非常错误的!特别是在“最小”模式下。

我的解决方法是:

  • 将搜索样式设置为默认(突出显示)
  • 将BackgroundImage(非BackgroundColor)设置为透明图像或使用[UIColor clearColor]
  • 创建UIImage
  • 将BarTintColor设置为[UIColor blackColor]
  • 将TintColor设置为[UIColor whiteColor]

搜索栏看起来像普通的最小模式, 选中时背景将为白色,因此您可以看到黑色文本。

解决方法并不完美,只是工作,希望可以帮助。

答案 1 :(得分:11)

我有这个错误,经过一些研究后,我得到了这个有效的代码! ios 7 +

//change searchbar color
[searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[searchBar setBackgroundImage:[UIImage imageWithCGImage:(__bridge CGImageRef)([UIColor clearColor])]];

答案 2 :(得分:5)

 // iOS7 and after
if(floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
{
    // set bar style
    bar.barStyle = UIBarStyleBlack;
    // set bar transparancy
    bar.translucent = NO;
    // set bar color
    bar.barTintColor = [UIColor blackColor];
    // set bar button color
    bar.tintColor = [UIColor blackColor];
    // set bar background color
    bar.backgroundColor = [UIColor blackColor];
}

答案 3 :(得分:2)

searchField.searchBarStyle = UISearchBarStyleMinimal;
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor whiteColor]];
[searchField setBarTintColor:[UIColor blackColor]];

将创建一个带有白色文字的黑色着色搜索栏。

创建searchBar并将最小样式设置为实际生效后,必须调用appearanceWhenContainedIn

答案 4 :(得分:1)

我发现,如果同时设置barstylesearchbarstyle,则searchBar会转到预期的最小样式

self.itemsSearchController.searchBar.barStyle = UIBarStyleDefault;
self.itemsSearchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;

答案 5 :(得分:0)

您只需编辑搜索栏属性,以防止搜索栏变得透明:

self.iSearchController.searchBar.searchBarStyle = UISearchBarStyleDefault;
self.iSearchController.searchBar.backgroundImage = [UIImage imageWithImage: [UIImage imageNamed:@"whiteBackgroundImage.png"] withTintColor:[UIColor blackColor]]; // or you can just create any random plain image with this color and use it with imageNamed: method.
self.iSearchController.searchBar.barTintColor = [UIColor blackColor];

为方便起见,imageWithImage:withTintColorMethod定义如下:

@implementation UIImage (Category)
+ (UIImage *) imageWithImage: (UIImage*) image withTintColor: (UIColor*) color {
    UIImage *newImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    UIGraphicsBeginImageContextWithOptions(newImage.size, NO, newImage.scale);
    [color set];
    [newImage drawInRect:CGRectMake(0, 0, newImage.size.width, newImage.size.height)];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

答案 6 :(得分:0)

我遇到了同样的问题。我的搜索栏有一个白色光标但是当我开始输入时,文字是黑色的。我的搜索图标也是灰色而不是白色。我几乎意外地找到了解决方案。

searchBar.setImage(UIImage(), for: .clear, state: .normal)