Когда я щелкаю панель поиска в ViewController, он загружает контроллер таблицы просмотра для отображения результатов поиска поверх контроллера представления.
Раньше это работало (хотя было много визуальных глюков, результаты поиска начинались на полпути и т. Д., Так как мне пришлось настраивать, я думал, что смогу исправить их все сразу)
Я просмотрел бесчисленные SO сообщения и попробовал следующее:
скрытая панель навигации в обоих режимах просмотра: VC и TVC
скрытая панель навигации, когда панель поиска начинает редактировать
попытался добавить ограничения на панель поиска в tableViewController - в настоящее время их нет, поскольку они все настроены в VC (даже не уверен, что это хорошая идея)
tried resultSearchController?.automaticallyAdjustsScrollViewInsets = true
tried resultSearchController?.hidesNavigationBarDuringPresentation = true
tried definesPresentationContext = true
tried self.navigationController?.extendedLayoutIncludesOpaqueBars = true
tried changing position for better view + slowing animations
tried self.resultSearchController?.isActive = true
self.tableView.tableHeaderView =
self.resultSearchController?.searchBar
searchBar.sizeToFit()
и более
Однако мне интересно, ничего из этого не сработает, потому что это работало до некоторой степени заранее
Разница может заключаться в том, что я думаю, что я программно создал представления, и они также создаются на вложенных представлениях (они находятся на карте). Иерархия:
Просмотр / CardView / SearchBar1 + SearchBar 2
Другое дело, что я не использую панель навигации в VC для отображения панели поиска, и у меня нет никакого кода, дающего ему позицию в TVC - так что я думаю, что именно в этом и заключается проблема. (я думал, что с этим справился searchController)
Также важно, я думаю: Когда я нажимаю на панель поиска, я очень кратко вижу, как панель поиска прыгает вверх в верхний левый угол экрана, а затем медленно скользит влево из поля зрения. Это только на долю секунды. Но, может быть, это связано с тем, как я представляю tableViewController?
Как видите, я застрял. Мои предположения связаны с представлениями и автопутешествиями, но если кто-нибудь может указать мне общее направление, в котором проблема может возникнуть, я буду очень признателен.
В качестве дополнительного примечания у меня есть этот код в моем представлении VC, если это имеет какое-либо значение:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: false)
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = true
}
в ВК:
func configureResultSearchController() {
let userSearchTableVC = storyboard!.instantiateViewController(withIdentifier: "UserSearchTableVC") as! UserSearchTableVC
resultSearchController = UISearchController(searchResultsController: userSearchTableVC)
resultSearchController?.searchResultsUpdater = userSearchTableVC
resultSearchController?.dimsBackgroundDuringPresentation = false
resultSearchController?.view.backgroundColor = .white
resultSearchController?.hidesNavigationBarDuringPresentation = false
userSearchTableVC.resultSearchController = resultSearchController
definesPresentationContext = true
}
// Hierarchy -> View / Card View / SearchBar
var searchBarTopAnchor: NSLayoutConstraint?
func addSearchBarToCard() {
cardView.addSubview(searchBar)
searchBar.translatesAutoresizingMaskIntoConstraints = false
searchBar.leadingAnchor.constraint(equalTo: cardView.leadingAnchor, constant: 0).isActive = true // constant is 0 by default, could be any else
searchBar.trailingAnchor.constraint(equalTo: cardView.trailingAnchor, constant: 0).isActive = true // constant is 0 by default, could be any else
searchBarTopAnchor = searchBar.topAnchor.constraint(equalTo: cardView.topAnchor, constant: 0)
searchBarTopAnchor?.isActive = true
searchBar.heightAnchor.constraint(equalToConstant: 44).isActive = true
}
В UserSearchTableVC нет ничего, что относится к макету searchBar, кроме изменения цвета searchBar и т. Д. (Как это было видно заранее, а также он все еще функционирует - то есть я могу искать, и результаты появляются, это просто положение панели поиска). Но я попробовал это, и это тоже не сработало:
override func viewWillAppear(_ animated: Bool) {
guard let searchBar = resultSearchController?.searchBar else {return}
view.addSubview(searchBar)
searchBar.translatesAutoresizingMaskIntoConstraints = false
searchBar.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true // constant is 0 by default, could be any else
searchBar.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true // constant is 0 by default, could be any else
searchBar.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
searchBar.heightAnchor.constraint(equalToConstant: 44).isActive = true
searchBar.layoutIfNeeded()
searchBar.sizeToFit()
searchBar.layoutIfNeeded()
searchBar.layer.shadowColor = nil
searchBar.layer.shadowOpacity = 0
searchBar.layer.shadowOffset = .zero
searchBar.layer.shadowRadius = 0
searchBar.layer.shadowOffset = .zero
}