Сделать отчет UISearchBar понятным

Я не могу очистить панель поиска. Я попытался очистить ее, установив ее цвет фона, и я также поместил одно изображение под панель поиска

Я также сделал четкий фон поиска

 for (UIView *subview in self.searchBarHome.subviews) {
      if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
         [subview removeFromSuperview];//please help me to make clear background of uisearchbar
        break; 
    }
}
[self.searchBarHome setBackgroundColor:[UIColor clearColor]];

Ответ 1

Для iOS7 + все, что вам нужно сделать, это:

[self.searchBarHome setBackgroundColor:[UIColor clearColor]];
[self.searchBarHome setBarTintColor:[UIColor clearColor]]; //this is what you want

ПРИМЕЧАНИЕ. Это не будет работать для iOS6


Для iOS6 + это позаботится об этом даже в iOS7:

[self.searchBarHome setBackgroundColor:[UIColor clearColor]];
[self.searchBarHome setBackgroundImage:[UIImage new]];
[self.searchBarHome setTranslucent:YES];

Ответ 2

UISearchBar включает в себя два подзапроса, это "UISearchBarBackground" и "UITextField". В IOS8 вам нужно удалить 'UISearchBarBackground', чтобы очистить его.

for (UIView *subview in [[yourSearchBar.subviews lastObject] subviews]) {        
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [subview removeFromSuperview];
        break;
    }
}

Ответ 3

Удаление UISearchBarBackground может привести к неизвестному поведению, особенно если вы начнете использовать этот элемент более продвинутыми способами.

Ответ на Ruozi был моим предпочтительным решением для захвата элемента UISearchBarBackground, однако я бы предложил установить альфа-значение 0, а не удалять представление со следующим:

for (UIView *subview in [[self.searchBar.subviews lastObject] subviews]) {
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [subview setAlpha:0.0];
        break;
    }
}

Добавьте вышеуказанный код в подкласс UIViewController, содержащий IBOutlet * searchBar. Этот фрагмент кода получит прозрачный фон для iOS8 и iOS9.

Кроме того, может быть лучше принять конструктивное решение включить этот код в ваш подкласс UISearchBar, чтобы избежать загромождения вашего viewController.

Ответ 4

Установка backgroundColor и barTintColor не помогла мне iOS 9+, оставив меня на черном фоне. Однако решение Ruozi будет работать. Вот быстрая версия того же кода.

for view in _searchBar.subviews.last!.subviews {
    if view.isKindOfClass(NSClassFromString("UISearchBarBackground")!) {
        view.removeFromSuperview()
    }
}

Ответ 5

Для тех, кто пытается найти не-хакерское решение, просто установите фоновое изображение на нуль в файле Storyboard/Xib. Буквально просто напишите nil в поле фонового изображения UISearchBar.

Ответ 6

Здесь мое решение в Swift 3 (комбо из ответов Scarafone и Andrew2M):

for view in searchBar.subviews.last!.subviews {
        if type(of: view) == NSClassFromString("UISearchBarBackground"){
            view.alpha = 0.0
        }
}

или, альтернативно:

searchBar.barTintColor = UIColor.clear
searchBar.backgroundColor = UIColor.clear
searchBar.isTranslucent = true
searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)

Ответ 7

Подкласс uisearchbar и переопределить метод initWithFrame и initWithCoder и установить цвет фона как

// For searchbar created programmatically
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self configureSetup];
    }
    return self;
}

// For search bar created on xib
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self configureSetup];
    }
    return self;
}

- (void)configureSetup
{
    self.backgroundColor = [UIColor clearColor];
}

и вместо этого используйте подклассическую панель поиска, где вы указали UISearchBar