Невозможно установить для полупрозрачного свойства UISearchBar значение NO.

Я пытаюсь установить barTintColor из UISearchBar без прозрачности. Тем не менее, установка translucent собственность, кажется, ничего не делает. Я воспроизвел проблему в голом проекте XCode здесь.

self.searchDisplayController.searchBar.translucent = NO;
self.searchDisplayController.searchBar.barTintColor = [UIColor redColor];

Красный цвет выше не совпадает с [UIColor redColor] в UIViews которые не являются полупрозрачными. Я знаю об обходном пути, связанном с установкой фонового изображения в строке поиска, но приведенный выше код также должен работать.

3 ответа

Я скачал ваш код и нашел решение, добавьте имя одного метода removeUISearchBarBackgroundInViewHierarchy и установить searchBar.backgroundColor как redColor.

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.searchDisplayController.searchBar.translucent = NO;

    [self removeUISearchBarBackgroundInViewHierarchy:self.searchDisplayController.searchBar];
    self.searchDisplayController.searchBar.backgroundColor = [UIColor redColor];
}

- (void) removeUISearchBarBackgroundInViewHierarchy:(UIView *)view
{
    for (UIView *subview in [view subviews]) {
        if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
            [subview removeFromSuperview];
            break; //To avoid an extra loop as there is only one UISearchBarBackground
        } else {
            [self removeUISearchBarBackgroundInViewHierarchy:subview];
        }
    }
}

Пожалуйста, установите изображение в строке поиска, так как это решит вашу проблему.

[[UISearchBar appearance] setBackgroundImage:[UIImage imageNamed:@"red"]];

Благодарю.

Может быть, слишком поздно для вечеринки,

Однако я сделал очень простое и изящное расширение для Swift 3, которое позволяет вам без проблем использовать полупрозрачное свойство.

Он не требует использования частного API или опасного обхода объекта.

Вы можете скачать его из этого репозитория Github.

Другие вопросы по тегам