UISearchBar Минимальный стиль делает оттенок черного при наборе текста

Когда я устанавливаю свой UISearchBar в minimal style в iOS7, когда я его выбираю, оттенок становится черным, и текст невозможно прочитать, потому что черный на черном.

Это не дает желаемого результата. При выборе оттенка по-прежнему остается черным...

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

Ответы

Ответ 1

У меня была такая же проблема, и я пробовал в течение нескольких часов, вывод UISearchBar довольно глючит! Особенно в "минимальном" режиме.

Мое обходное решение:

  • Установите стиль поиска по умолчанию (выдающийся)
  • Установите BackgroundImage (Not BackgroundColor) на прозрачное изображение или создайте UIImage с помощью [UIColor clearColor]
  • Установите BarTintColor на [UIColor blackColor]
  • Установите TintColor на [UIColor whiteColor]

Панель поиска выглядит как минимальный режим в обычном режиме, и фон будет белым при выборе, чтобы вы могли видеть текст черного цвета.

Обходной путь не совершенен, он просто работает, надеюсь, может помочь.

Ответ 2

У меня была эта ошибка, и после некоторого исследования я получил этот код, который работает! ios 7 +

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

Ответ 3

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

Ответ 4

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

Создает черную тонированную панель поиска с белым текстом.

appearanceWhenContainedIn должен быть вызван после создания searchBar и установки минимального стиля для фактического вступления в силу.

Ответ 5

Я узнаю, что если вы установите как barstyle, так и searchbarstyle, searchBar превратится в ожидаемый минимальный стиль

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

Ответ 6

Вы можете просто изменить свойства панели поиска, чтобы предотвратить прозрачность панели поиска:

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