UISearchController iOS 11 사용자 정의
UISearchController
검색 창의 모양을 사용자 지정하기 위해 iOS 11 이전에는 다음 코드를 사용했습니다 .
var searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.setDefaultSearchBar()
searchController.searchResultsUpdater = self
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
tableView.tableHeaderView = searchController.searchBar
}
extension UISearchBar {
func setDefaultSearchBar() {
self.tintColor = UIColor.blue
self.searchBarStyle = .minimal
self.backgroundImage = UIImage(color: UIColor.clear)
let searchBarTextField = self.value(forKey: "searchField") as! UITextField
searchBarTextField.textColor = UIColor.white
searchBarTextField.tintColor = UIColor.blue
searchBarTextField = .dark
}
}
그러나 iOS 11로 업데이트 UISearchController
하고 navigationItem
모든 사용자 정의의 일부로 추가 (내 코드가 호출되었음을 증명하는 키보드 모양 제외)가 표시되지 않습니다. 이것은 버그입니까 아니면 잘못 구현 했습니까?
편집 : 첨부 된 것은 iOS 10 (첫 번째) 및 iOS 11을 실행하는 장치의 두 스크린 샷입니다.
편집 2 : 지금 까지이 질문에 대한 많은 관심은 UISearchBar
. 나는 이것보다 더 많은 것을보고있다-배경색, 색조 색상, 검색 표시기 및 지우기 버튼 색상 등은 모두 iOS 10에서 완벽하게 할 수 있음에도 불구하고 iOS 11을 실행하는 기기에서 사용자 정의 할 수 없습니다.
방금 설정하는 방법을 찾았습니다. (Brandon과 Krunal의 도움으로 감사합니다!)
"취소"텍스트 :
searchController.searchBar.tintColor = .white
검색 아이콘 :
searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.search, state: .normal)
클리어 아이콘 :
searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.clear, state: .normal)
검색 텍스트 :
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]
자리 표시 자 :
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])
흰색 배경 :
if #available(iOS 11.0, *) {
let sc = UISearchController(searchResultsController: nil)
sc.delegate = self
let scb = sc.searchBar
scb.tintColor = UIColor.white
scb.barTintColor = UIColor.white
if let textfield = scb.value(forKey: "searchField") as? UITextField {
textfield.textColor = UIColor.blue
if let backgroundview = textfield.subviews.first {
// Background color
backgroundview.backgroundColor = UIColor.white
// Rounded corner
backgroundview.layer.cornerRadius = 10;
backgroundview.clipsToBounds = true;
}
}
if let navigationbar = self.navigationController?.navigationBar {
navigationbar.barTintColor = UIColor.blue
}
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
검색 창에 입력 된 텍스트를 흰색으로 올바르게 설정하려면 (암색 필드 색상을 사용하는 경우) :
searchController.searchBar.barStyle = .black
텍스트 필드 배경색을 설정하려면
if #available(iOS 11.0, *) {
if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {
if let backgroundview = textfield.subviews.first {
// Background color
backgroundview.backgroundColor = UIColor.white
// Rounded corner
backgroundview.layer.cornerRadius = 10;
backgroundview.clipsToBounds = true;
}
}
}
그러나 같은 것을 사용하여
textfield.textColor = UIColor.blue
위의 작동하지 않는 것 같습니다.
검색 창의 바 스타일을 설정해보세요.
searchController.searchBar.barStyle = UIBarStyleBlack;
UISearchBar
의 기본 을 찾아 UITextField
텍스트 색상을 변경해야합니다.
검색 컨트롤러가 UISearchControllerDelegate.willPresentSearchController
표시 ( ) 또는 표시 될 때만 효과가 있습니다.
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// setup your search controller...
// set search controller's delegate
navigationItem.searchController?.delegate = self
}
}
extension ViewController : UISearchControllerDelegate {
func willPresentSearchController(_ searchController: UISearchController) {
// update text color
searchController.searchBar.textField?.textColor = .white
}
}
extension UISearchBar {
var textField: UITextField? {
for subview in subviews.first?.subviews ?? [] {
if let textField = subview as? UITextField {
return textField
}
}
return nil
}
}
전화를 setDefaultSearchBar
로 이동하면 viewDidAppear
이 문제가 해결됩니다.
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
시도해보십시오 : searchController.<YOUR SEARCHBAR>.barStyle = .blackOpaque
대신 self.searchBarStyle = .minimal
.
그러므로:
var searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.setDefaultSearchBar()
//Add this line below
searchController.searchBar.barStyle = .blackOpaque
searchController.searchResultsUpdater = self
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
tableView.tableHeaderView = searchController.searchBar
}
extension UISearchBar {
func setDefaultSearchBar() {
self.tintColor = UIColor.blue
//Delete this line below
self.searchBarStyle = .minimal
self.backgroundImage = UIImage(color: UIColor.clear)
let searchBarTextField = self.value(forKey: "searchField") as! UITextField
searchBarTextField.textColor = UIColor.white
searchBarTextField.tintColor = UIColor.blue
searchBarTextField = .dark
}
}
searchBar에서 textField의 배경색을 변경해야하는 경우 여기 내 대답을 참조하십시오. https://stackoverflow.com/a/46315974/1109892
UISearchBar 내부의 UITextField에 액세스해야합니다. 다음을 사용하여 수행 할 수 있습니다.
let textFieldInsideSearchBar = yourSearchbar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
또는
참조 URL : https://stackoverflow.com/questions/45663169/uisearchcontroller-ios-11-customization
'IT이야기' 카테고리의 다른 글
로컬이 아닌 전역 적으로 pip 패키지를 설치 (0) | 2021.04.14 |
---|---|
'AuthController'를 활성화하는 동안 'Microsoft.AspNetCore.Identity.UserManager'유형에 대한 서비스를 확인할 수 없습니다. (0) | 2021.04.13 |
어떤 데이터 구조를 사용 하시겠습니까 : TreeMap 또는 HashMap? (0) | 2021.04.13 |
레일에서-%>와 %>의 차이 (0) | 2021.04.13 |
StringBuilder 대 StringWriter 및 PrintWriter의 문자열 어셈블리 (0) | 2021.04.13 |