У меня проблема с UISearchBar (XCode 11, iOS 13, Swift 5) внутри ContainerView в UITableView. Там я создал UIView (searchView) и sortView рядом друг с другом, чтобы пользователь мог искать и сортировать результаты.
Пока проблем нет, но когда я заканчиваю поиск, нажав кнопку отменыПанель поиска, панель поиска расширяется до полной ширины экрана и перекрывает sortView.
Ситуация до активации поиска
Ситуация с активным поиском
Неправильное поведение после деактивации поиска
Как можно сохранить панель поиска внутри своего суперпредставления (searchView)?
Я уже установил некоторые ограничения для этого, но безуспешно.
См. Также некоторый код:
func viewDidLoad() {
...
searchController.searchBar.placeholder = "SR durchsuchen ..."
searchController.searchBar.tintColor = UIColor.white
searchController.dimsBackgroundDuringPresentation = false
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "Ende"
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.delegate = self
searchView.addSubview(searchController.searchBar)
...
}
override func viewDidLayoutSubviews() {
self.searchController.searchBar.sizeToFit()
}
override func viewWillDisappear(_ animated: Bool) {
self.searchController.definesPresentationContext = false
self.searchController.isActive = false
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let searchTextField = self.searchController.searchBar.searchTextField
searchTextField.textColor = UIColor(named: "searchFieldTextColor")
searchTextField.leftView?.tintColor = UIColor(named: "searchFieldTextColor")
searchController.searchBar.frame.size.width = searchView.frame.size.width
searchController.searchBar.frame.size.height = searchView.frame.size.height
}
override func viewWillLayoutSubviews() {
searchController.searchBar.frame = CGRect(x: 0, y: 0, width: searchView.frame.width, height: searchView.frame.height)
searchController.searchBar.sizeToFit()
let margins = searchView.layoutMarginsGuide
searchController.searchBar.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: 0).isActive = true
searchController.searchBar.topAnchor.constraint(equalTo: margins.topAnchor, constant: 0).isActive = true
searchController.searchBar.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 0).isActive = true
searchController.searchBar.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: 0).isActive = true
}