Поле поиска UISearchController сдвигается вниз при касании

У меня есть UITableVIewController, который реализует UISearchBarDelegate, представление встроено в контроллер навигации.

    class FacilityTableViewController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate, AmenityFilterDelegate {

        // MARK: - Public Variables

        var targetFacilities = [Int]()
        var searchController: UISearchController = UISearchController(searchResultsController: nil)

        // MARK: - Private Variables

        private var viewModel: FacilityTableViewModel!
        private let parkGreenColor = UIColor(red: 73/255, green: 136/255, blue: 84/255, alpha: 1)
        private var showEmptyMessage = false

        // MARK: - View Lifecycle

        /**
        Setup view after loading
        */
        override func viewDidLoad() {
            super.viewDidLoad()

            trackScreenView("Facility Table View")

            if targetFacilities.isEmpty {
                viewModel = FacilityTableViewModel()
            } else {
                viewModel = FacilityTableViewModel(facilityIds: targetFacilities)
            }

            // Seup search controller
            searchController.searchResultsUpdater = self
            searchController.dimsBackgroundDuringPresentation = false
            searchController.hidesNavigationBarDuringPresentation = false
            searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, searchController.searchBar.frame.size.width, 44)
            searchController.searchBar.tintColor = UIColor.whiteColor()
            searchController.searchBar.barTintColor = parkGreenColor
            searchController.searchBar.translucent = false

            self.definesPresentationContext = true

            tableView.tableHeaderView = searchController.searchBar
        }

Перед нажатием на поиск

Я обнаружил, что когда я отключил свойство Translucent панели навигации, поле поиска смещает свое положение вниз.

После нажатия на поиск

Если я устанавливаю definesPresentationContext = false, то панель поиска не смещается вниз, однако, если я ввожу текст в поле поиска и выбираю один из результатов, результирующее модальное окно не может открыться. Я получаю следующую ошибку:

Результаты поиска

    2015-03-17 15:06:56.101 VB ParkFinder[16368:2667719] Warning: Attempt to present <UINavigationController: 0x7fa2f9ced930>  on <VB_ParkFinder.FacilityTableViewController: 0x7fa2f9c27ba0> which is already presenting (null)

Ниже приведен мой код перехода:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let navController = segue.destinationViewController as UINavigationController
        if segue.identifier == "facilityDetailsSegue" {
            let detailsViewController = navController.childViewControllers.last as FacilityDetailsViewController

            if let indexPath = tableView.indexPathForSelectedRow() {
                var facilityId: Int
                if searchController.active {
                    facilityId = viewModel.idForSearchResultsAtIndexPath(indexPath)
                } else {
                    facilityId = viewModel.idForFacilityAtIndexPath(indexPath)
                }

                detailsViewController.currentFacilityId = facilityId
            }
        } else if segue.identifier == "FilterPopover" {
            let aftvc = navController.childViewControllers.last as AmenityFilterTableViewController
            aftvc.delegate = self
        }
    }

Я теряюсь, что делать. Я хочу оставить панель навигации с отключенной прозрачностью, и мне нужно иметь возможность запускать модальное окно из результатов поиска. Любые мысли о том, как это сделать?


person g0ld2k    schedule 17.03.2015    source источник


Ответы (1)


У меня была такая же проблема, посмотри

Странное поведение смещения представления UISearchDisplayController в iOS 7 при внедрении на панели навигации

Это решило мою проблему.

Думаю, это может быть помечено как дубликат, не знаю, как это сделать.

person Ade    schedule 26.03.2015
comment
Пожалуйста, не размещайте ссылки. Вместо этого напишите фактическое решение здесь. Ссылка может умереть. - person Raphael; 26.08.2016
comment
Чтобы сэкономить ваше время: ссылка обычно посвящена установке для Under Top Bars и Under Opaque Bars значения TRUE для контроллера представления, который имеет табличное представление с панелью поиска, вызывающей проблемы. - person raven_raven; 03.02.2017