Установка полупрозрачного в NO на UISearchBar

У нас есть UITableView с searchbar добавлено с searchDisplayController,

Мы хотим отключить прозрачность во всем приложении.

Я отключил полупрозрачность для панели навигации и других панелей, но не для панели поиска, когда он использует контроллер дисплея. В одной части приложения, когда мы используем панель поиска, но не контроллер дисплея, прозрачность установлена ​​правильно.

Как я могу установить полупрозрачное свойство UISearchBar с дисплеем контроллера быть НЕТ?

РЕДАКТИРОВАТЬ: это мой код в viewDidLoad

self.navigationController.navigationBar.translucent = NO;
BOOL t = self.searchDisplayController.searchBar.translucent;
self.searchDisplayController.searchBar.translucent = NO;
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.searchDisplayController.searchBar.barTintColor = [UIColor redColor];
UIBarStyle b1 = self.searchDisplayController.searchBar.barStyle;
UISearchBarStyle b2 = self.searchDisplayController.searchBar.searchBarStyle;
BOOL t2 = self.searchDisplayController.searchBar.translucent;

Запуск в отладчике, t = YES и t2 = YES. b1 = UIBarStyleDefault и b2 = UISearchBarStyleDefault, Я устанавливаю НЕТ в неправильном месте? Я попробовал настройку в storyboard и здесь, в viewDidLoad

2 ответа

Решение

Для UISearchBarStyleProminent:

1) Обязательно установите флажок "Полупрозрачный" для строки поиска в Инспекторе атрибутов.

2) Добавьте следующее в viewDidLoad:

self.navigationController.navigationBar.translucent = NO; // If you have a navBar
self.searchDisplayController.searchBar.translucent = NO;

Редактировать из Rudolf Adamkovič:

"Я нашел это для UISearchBarStyleProminentВыполнение [следующего] помогает. Таким образом, вы можете оставить его в раскадровке ".
searchBar.translucent = YES;
searchBar.translucent = NO;

Для UISearchBarStyleMinimal:

Чтобы минимальная панель поиска не была полупрозрачной, я создал обходной путь.

1) Обязательно установите флажок "Полупрозрачный" для строки поиска в Инспекторе атрибутов.

2) Добавьте следующий код для viewDidLoad:

self.navigationController.navigationBar.translucent = NO;
self.searchDisplayController.searchBar.translucent = NO;
self.searchDisplayController.searchBar.backgroundColor = [UIColor desiredColor];

3) UIView должен быть добавлен в viewController. Это представление должно быть высотой 20 пикселей и иметь тот же цвет, что и searchBar.barTintColor.

Примечание: я думаю, что этот обходной путь необходим, потому что: "Стиль UISearchBarStyleMinimal не предоставляет цвета фона или изображения по умолчанию, но будет отображать его, если настроен как таковой". Таким образом, единственный способ получить эту функциональность для UISearchBarStyleMinimal - это установить backgroundColor.

См. Документацию UISearchBar для более подробной информации.

Ни один из приведенных выше ответов не работал для меня на iOS 7/8. Вот некоторый код установки, который добился цели:

searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 44)];
searchBar.scopeButtonTitles = @[@"Scope1", @"Scope2"];
searchBar.selectedScopeButtonIndex = 0;
searchBar.backgroundColor = [UIColor clearColor];
searchBar.barTintColor = [UIColor clearColor];
searchBar.translucent = YES; // SUPER IMPORTANT, REMOVING THIS MESSED UP THE SCOPE BAR

// ONLY USE IMAGES, NOT BACKGROUND COLORS
UIImage *searchBarBackgroundImage = [[UIImage imageNamed:@"SearchBarBackgroundImage"];
UIImage *scopeBarBackgroundImage = [[UIImage imageNamed:@"ScopeBarBackgroundImage"];
[searchBar setBackgroundImage:searchBarBackgroundImage
               forBarPosition:UIBarPositionAny
                   barMetrics:UIBarMetricsDefault];
searchBar.scopeBarBackgroundImage = scopeBarBackgroundImage;
searchBar.tintColor = [UIColor whiteColor];
Другие вопросы по тегам