Панель поиска исчезает (перемещается за пределы экрана влево?) При нажатии, когда загружается просмотр таблицы из ViewController - PullRequest
0 голосов
/ 05 апреля 2019

Когда я щелкаю панель поиска в 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

    }
...