Подтвердить что ты не робот

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

4b9b3361

Ответ 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.