2014-01-08 3 views
15

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

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

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]]; 
+0

Вы подклассы строку поиска? – ldindu

+0

Пожалуйста, помогите мне решить эту проблему. – Vikram

+0

@inindu NO Я не хочу просто удалить светло-серый фон uisearchbar – Vikram

ответ

26

Для 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]; 
+0

thnk u so much для этого сообщения ... есть ли какой-либо способ для iOS6? – Vikram

+0

@Vikram: да, есть способ (_indirect way _) ... проверить обновленный ответ – staticVoidMan

+0

thnks вам сэр для этого решения – Vikram

1

подкласса 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]; 
} 

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

14

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

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

Мне пришлось сделать комбинацию этого и других ответов, чтобы он полностью работал, но это отличная отправная точка. –

9

Удаление 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.

3

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

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

Настройка чистого фона для меня тоже не работала. Это решение работало. Вот предложение: я вставил ваш код в расширение для UISearchBar в функции под названием «removeBackground()». Тогда всякий раз, когда я хочу очистить фон в поисковой панели, мне просто нужно вызвать searchbar.removeBackground() –

3

Для тех, кто пытается найти ноны Hacky решения этой проблемы, просто установить фоновое изображение в ноль на раскадровке/файл XIb. Буквально просто напишите nil в поле фонового изображения UISearchBar.

+1

Разум достаточно взорван. –

2

Вот мое решение в 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) 
Смежные вопросы