IOS7, backgroundImage для UISearchBar
Я делаю переход UI между 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, когда выбран searchBar, scopeBar появляется с хорошим backgroundImage (устанавливается с помощью searchBar.scopeBarBackgroundImage), но searchBar является своего рода полупрозрачным серым. Когда я нажимаю кнопку "Отмена", возвращается backgroundImage searchBar.
![How it looks]()
/////////////////////////////////////////////////////////////////////////////////////////////////////
ОБЪЕДИНЕННЫЙ ВОПРОС
/////////////////////////////////////////////////////////////////////////////////////////////////////
На самом деле, я использовал barTintColor и другие опции здесь и там, но он не работает. Это результат того, что набор barTintColor имеет тот же цвет. Но есть этот белый слой сверху
![enter image description here]()
Ответы
Ответ 1
В iOS 7 свойства backgroundImage
и scopeBarBackgroundImage
больше не работают должным образом и становятся полупрозрачными.
В iOS 7, который решает эту проблему, был введен следующий метод. (Docs здесь)
setBackgroundImage:forBarPosition:barMetrics:
Вот что вы должны сделать:
[self.searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:[UIColor yourColor]]
forBarPosition:0
barMetrics:UIBarMetricsDefault];
Здесь barPosition : 0
- UIBarPositionAny
.
Edit:
Быстрый код:
self.searchDisplayController.searchBar.setBackgroundImage(self.image(color: UIColor.yourColor), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)
Ответ 2
Я смог воспроизвести то, что вы пытались сделать, и, похоже, для меня это работает, если я установил barTintColor
в мой выбор цвета.
Я предлагаю попробовать:
self.searchDisplayController.searchBar.barTintColor = [UIColor myBGColor];
Я сделал [UIColor redColor]
и получил ожидаемые результаты.
Ответ 3
Если вы установите свойство barTintColor
в строке поиска, вы получите то, что ожидаете. Я только что пробовал это, и он работает:
self.searchDisplayController.searchBar.barTintColor = [UIColor yellowColor];
Имейте в виду, что свойство barTintColor
было введено в iOS 7.