kakajan
kakajan

Reputation: 2707

iOS 11, search bar jumps to top from tableHeaderView

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:

enter image description here

and after i focus to search bar:

enter image description here

Upvotes: 0

Views: 1305

Answers (1)

Shih Ken
Shih Ken

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:

enter image description here

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:

enter image description here

Upvotes: 1

Related Questions