Установка полупрозрачного в 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];