Reputation: 2707
I've got a UITableView
in which I set its header to be a search bar. When i focus to search bar, it jumps to top of the screen, works fine on devices lower than iOS11, i'm not using view with navigation bar, i want to fix search bar at the top of table
self.definesPresentationContext = true
self.extendedLayoutIncludesOpaqueBars = true;
searchController.delegate = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.placeholder = NSLocalizedString("SEARCH_BOX_TEXT", bundle: bundle!, comment: "Search box text")
searchController.searchBar.sizeToFit()
searchController.searchBar.barTintColor = UIColor.lightGray
searchController.searchBar.setValue(NSLocalizedString("SEARCH_BAR_CANCEL_BUTTON", bundle: bundle!, comment: "Search bar cancel button"), forKey: "_cancelButtonText")
productListTable.tableHeaderView = searchController.searchBar
Before:
and after i focus to search bar:
Upvotes: 0
Views: 1305
Reputation: 507
I also put my search bar into my tableview header
So maybe you can consider my answer which can work correctly in iOS11.
Here is it.
In your storyboard:
Code:
override func viewDidLoad() {
super.viewDidLoad()
self.setupSearchController()
}
func setupSearchController() {
self.searchResultController = UISearchController(searchResultsController: nil)
self.searchResultController.searchResultsUpdater = self
self.searchResultController.delegate = self
self.searchResultController.hidesNavigationBarDuringPresentation = false
self.searchResultController.dimsBackgroundDuringPresentation = false
self.searchResultController.searchBar.delegate = self
self.searchResultController.searchBar.searchBarStyle = .minimal
self.searchResultController.searchBar.tintColor = UIColor.white
self.phoneSearchView.searchBarContainer.addSubview(self.searchResultController.searchBar)
self.memberListTableView.tableHeaderView = self.phoneSearchView
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.searchResultController.searchBar.sizeToFit()
self.searchResultController.searchBar.frame.size.width = self.phoneSearchView.searchBarContainer.frame.size.width
self.searchResultController.searchBar.frame.size.height = self.phoneSearchView.searchBarContainer.frame.size.height
}
Result:
Upvotes: 1