2016-12-05 10 views
1

Я разрабатываю для iOS 10 с помощью Xcode 8 (версия 8.1 (8B62), если быть точным), и я пытаюсь разработать контроллер вида, который отображает фиксированный выше tableView. У меня исходный макет, но когда я активирую searchBar, он полностью исчезает из моего представления.SearchController SearchBar Disappear from View

Вот вид иерархии с моей точки зрения контроллера:

View 
| 
|---- UISearchBar 
| 
|---- UITableView 

и вот что она выглядит следующим образом:

initial layout

Теперь проблема. Поскольку нет инструмента интерфейса Builder для включения UISearchController, как это было для UISearchDisplayController, я добавляю программный код searchBar в свой интерфейс в моем методе контроллера моего вида, и я использую searchController.searchBar для замены временного UISearchBar, который я использую в раскадровке :

// attribute to store the searchController 
var searchController: UISearchController! 

// temporary searchBar from storyboard 
@IBOutlet weak var tempSearchBar: UISearchBar! 

... 

override func viewDidLoad() { 
    super.viewDidLoad() 

    searchController = UISearchController(searchResultsController: nil) 
    searchController.searchResultsUpdater = self 
    searchController.searchBar.frame = tempSearchBar.frame 
    tempSearchBar.removeFromSuperview() 
    view.addSubview(searchController.searchBar) 
} 

Когда я запустить приложение и активировать searchBar объект, прикрепленный к моему searchController, он исчезает из поля зрения:

activated searchBar

tableView также смещается странно, но мой главный фокус - получить searchBar, чтобы оставаться в пределах видимости. Я пробовал несколько разных вещей, чтобы сделать эту работу, но мне не повезло. Буду признателен за любую оказанную помощь. Я просто чувствую, что этого не должно быть трудно реализовать. Я могу сделать это просто отлично с объектом UISearchDisplayController, но они устарели, и я стараюсь быть хорошим программистом и не использовать его.

ответ

0

У меня такая же проблема, как и вы. Проблема связана с попыткой вручную установить рамку вашего поиска. Вам нужна панель поиска temp в раскадровке?

Чтобы исправить это удалить код, в котором вы установили рамку и подключить TableView от раскадровки к коду:

override func viewDidLoad() { 
super.viewDidLoad() 

searchController = UISearchController(searchResultsController: nil) 
searchController.searchResultsUpdater = self 
tableView.tableHeaderView = searchController.searchBar 
}