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 панели поиска возвращается.
/////////////////////////////////////////////////////////////////////////////////////////////////////
ОТРЕДАКТИРОВАННЫЙ ВОПРОС
/////////////////////////////////////////////////////////////////////////////////////////////////////
на самом деле, я использовал bartintcolor и другие варианты здесь и там, но это не работает. Это результат с набором barTintColor с тем же цветом. Но есть этот белый слой сверху
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, я просто оставлю это здесь для будущего использования, так как я боролся с ним довольно долгое время.
получить себе 1px изображение с желаемым цветом (даже ясно)
-
установите его как backgroundImage, используя:
searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)