2015-03-17 5 views
10

У меня есть UITableVIewController, который реализует UISearchBarDelegate, представление встроено в контроллер навигации.UISearchController Search Box Shift Down on Tap

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 
     } 

Before Tapping on Search

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

After Tapping on Search

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

Search Results

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) 

Ниже мой код Segue:

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 
     } 
    } 

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

+1

Возможный дубликат [странное поведение смещения вида UISearchDisplayController в iOS 7 при встраивании в панель навигации] (http://stackoverflow.com/questions/20731360/strange-uisearchdisplaycontroller-view-offset-behavior-in-ios-7- когда-встроенный) –

ответ

5

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

Strange UISearchDisplayController view offset behavior in iOS 7 when embedded in navigation bar

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

Угадайте, что он может быть отмечен как дубликат, не уверен, как это сделать.

+0

Пожалуйста, не публикуйте ссылки. Вместо этого напишите фактическое решение здесь. Ссылка может умереть. – Raphael

+1

Чтобы сэкономить ваше время: ссылка, как правило, связана с настройкой «Under Top Bars» и «Under Opaque Bars» на TRUE для контроллера вида, который имеет вид таблицы с панелью поиска, вызывающей проблемы. –