Как зафиксировать searchBar под navigationBar?

Для того чтобы зафиксировать searchBar под navigationBar в приложении на Swift, вы можете использовать различные методы. Вот один из них:

1. Создайте экземпляр класса UISearchBar и добавьте его как подвид navigationBar в методе viewDidLoad вашего контроллера. Ниже приведен пример кода:

override func viewDidLoad() {
    super.viewDidLoad()

    let searchBar = UISearchBar()
    searchBar.showsCancelButton = false
    searchBar.placeholder = "Search"
    searchBar.delegate = self

    if let navigationBar = self.navigationController?.navigationBar {
        navigationBar.addSubview(searchBar)
        searchBar.translatesAutoresizingMaskIntoConstraints = false
        searchBar.topAnchor.constraint(equalTo: navigationBar.topAnchor).isActive = true
        searchBar.leftAnchor.constraint(equalTo: navigationBar.leftAnchor).isActive = true
        searchBar.rightAnchor.constraint(equalTo: navigationBar.rightAnchor).isActive = true
        searchBar.heightAnchor.constraint(equalToConstant: 44).isActive = true
    }
}

2. В вашем классе контроллера реализуйте протокол UISearchBarDelegate. Добавьте следующие методы для обработки событий:

extension YourViewController: UISearchBarDelegate {
    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        // Код, который выполняется, когда начинается редактирование
    }

    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        // Код, который выполняется, когда завершается редактирование
    }

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        // Код, который выполняется, когда текст изменяется
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        // Код, который выполняется, когда нажата кнопка поиска
    }
}

3. Если вы хотите обрабатывать события, связанные с searchBar в вашем контроллере, вы можете использовать следующий код:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    NotificationCenter.default.addObserver(self, selector: #selector(YourViewController.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(YourViewController.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}

@objc func keyboardWillShow(notification: NSNotification) {
    // Код, который выполняется, когда клавиатура появляется
}

@objc func keyboardWillHide(notification: NSNotification) {
    // Код, который выполняется, когда клавиатура исчезает
}

Теперь у вас есть жестко зафиксированный searchBar под navigationBar в вашем приложении на Swift. Вы также можете настроить его внешний вид и добавить дополнительную функциональность в соответствии с вашими потребностями.