iOS7, backgroundImage для UISearchBar

Я делаю переход пользовательского интерфейса между iOS 6 и iOS 7.

У нас есть UISearchBar, связанный с UISearchDisplayController, я установил backgroundImage navigationBar и searchBar в 1x1 изображение, динамически созданное с цветом.

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, когда выбрана панель поиска, появляется клавиша scopeBar с хорошим фоновым изображением (set with searchBar.scopeBarBackgroundImage) , но панель поиска вид полупрозрачные серые. Когда я нажимаю на отмена, backgroundImage панели поиска возвращается.

How it looks

/////////////////////////////////////////////////////////////////////////////////////////////////////

ОТРЕДАКТИРОВАННЫЙ ВОПРОС

/////////////////////////////////////////////////////////////////////////////////////////////////////

на самом деле, я использовал bartintcolor и другие варианты здесь и там, но это не работает. Это результат с набором barTintColor с тем же цветом. Но есть этот белый слой сверху enter image description here

4 ответов


в iOS 7, свойства backgroundImage и scopeBarBackgroundImage больше не работает, как ожидалось, и становятся полупрозрачными.

следующий метод был внедрен в iOS 7, который решает эту проблему. (Docs здесь)

setBackgroundImage:forBarPosition:barMetrics:

вот что вы должны сделать :

 [self.searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:[UIColor yourColor]] 
                                             forBarPosition:0 
                                                 barMetrics:UIBarMetricsDefault];

здесь barPosition : 0 is UIBarPositionAny.

Edit:

Swift код:

self.searchDisplayController.searchBar.setBackgroundImage(self.image(color: UIColor.yourColor), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)

я смог воспроизвести то, что вы пытались сделать, и, похоже, это сработает для меня, если я установлю barTintColor к моему выбору цвета.

Я бы предложил попробовать:

self.searchDisplayController.searchBar.barTintColor = [UIColor myBGColor];

Я [UIColor redColor] и получил результаты, которые я ожидал.


Если вы выберите barTintColor свойства вашего поиска, вы получите то, что вы ожидаете. Я только что пробовал это, и это работает:

self.searchDisplayController.searchBar.barTintColor = [UIColor yellowColor];

имейте в виду, что barTintColor свойство было введено в iOS 7.


Так как нет текущей версии Swift, я просто оставлю это здесь для будущего использования, так как я боролся с ним довольно долгое время.

  1. получить себе 1px изображение с желаемым цветом (даже ясно)

  2. установите его как backgroundImage, используя:

    searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)