UISearchBar не центрируется при закреплении ниже UINavigationBar - PullRequest
2 голосов
/ 14 октября 2019

У меня есть этот код ниже, который настраивает ограничения представления:

func configNavigationBarConstraints() {
    navigationBar.autoPinEdge(toSuperviewEdge: .leading)
    navigationBar.autoPinEdge(toSuperviewEdge: .trailing)
    if #available(iOS 11.0, *) {
        navigationBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        return
    }
    navigationBar.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
}

func configSearchBarConstraints() {
    searchBar.autoPinEdge(.top, to: .bottom, of: navigationBar)
    //    taskHistorySearchBar.autoPinEdge(.top, to: .bottom, of: navigationBar, withOffset: 6) //This is a solution but no ideal, the height diff varies by device
    searchBar.autoPinEdge(toSuperviewEdge: .left)
    searchBar.autoPinEdge(toSuperviewEdge: .right)
}

Это приводит к такому представлению:

enter image description here

Обратите внимание, что UISearchBar не выровнен, есть идеи, что я могу сделать? Даже если я установлю для него значение высокой высоты по ограничению, центр будет смещен.

1 Ответ

0 голосов
/ 14 октября 2019

Вы, вероятно, устанавливаете делегат UINavigationBar и делегат UISearchBar, оба расширяют UIBarPositioningDelegate, поэтому вам нужно сделать следующее:

extension ViewController: UINavigationBarDelegate {
  func position(for bar: UIBarPositioning) -> UIBarPosition {
    if bar is UINavigationBar {
      return .topAttached
    }
    return .any
  }
}

Это будет применяться только к параметру .topAttached для UINavigationBar.

...