2017-02-14 2 views
4

Есть более старая версия этого вопроса для более старых версий iOS больше не работает из-за изменений макета в UISearchBar.Как очистить цвет фона UISearchBar в iOS10 Swift?

Я попробовал следующее, чтобы полностью удалить цвет фона UISearchBar, но он не работает. (Я попытался посмотреть иерархические взгляды этого, но Xcode терпело крах для этого варианта.)

private func clearBackgroundColor() { 
    for view in self.subviews { 
     view.backgroundColor = UIColor.clear 
     for subview in view.subviews { 
      subview.backgroundColor = UIColor.clear 
     } 
    } 
} 

Любые идеи или предложения?

Спасибо!

+0

Вы вызываете эту функцию в 'ViewDidLayoutSubviews()'? – Lumialxk

+0

@Lumialxk Nah, UISearchBar не имеет этого метода. Я вызвал его из инициализации. – RainCast

ответ

7
private func clearBackgroundColor() { 
    guard let UISearchBarBackground: AnyClass = NSClassFromString("UISearchBarBackground") else { return } 

    for view in self.subviews { 
     for subview in view.subviews { 
      if subview.isKind(of: UISearchBarBackground) { 
       subview.alpha = 0 
      } 
     } 
    } 
} 

Это то, что я сделал в конце концов, что работал. Спасибо всем за ваши ответы.

+0

Как комментарий для будущих странников ... Это работает на Xcode 9, Swift 3.0 (еще не работал с 4.0, не хочу нарушать мой производственный код) ** @ Ответ Lumialxk ** не работал , – QuantumHoneybees

+0

@QuantumHoneybees для iOS 11 вам нужно будет выполнять итерацию в представлении контента. 'searchBar.subviews.first? .subviews' вместо' searchBar.subviews' – btype

4

Я думаю, что вы упоминание о BarTintColor в строке поиска

попробовать это:

searchBar.barTintColor = .white 
+2

Спасибо. Но мне нужно установить его в UIColor.clear. После того, как я установил его для очистки, он на самом деле отображается как черный на экране. Мне нужно все внутри этой панели поиска, чтобы иметь прозрачный цвет, только за исключением ввода текста. – RainCast

+1

UIColor.clear показать цвет представления за вашим поиском. Таким образом, я думаю, что взгляд за цветом backgounrd вашего поискаBar черный –

2

Попробуйте это.

class CustomSearchBar: UISearchBar { 
    override func layoutSubviews() { 
     super.layoutSubviews() 
     clearBackgroundColor() // function in the question 
    } 
} 

private func clearBackgroundColor() { 
    for view in self.subviews { 
     view.backgroundColor = UIColor.clear 
     for subview in view.subviews { 
      subview.backgroundColor = UIColor.clear 
     } 
    } 
} 
+0

Спасибо, я пошел в другое направление после того, как моя функция «Просмотр иерархии» xCode работает, в основном проверила все имена внутри макета. – RainCast

1

попробовать множество BackgroundImage: [searchBar setBackgroundImage:[UIImage new]];

Смежные вопросы