Merhaba kullanır insanlara UISearchController
ve sonra da takılarak UISearchBar
için navigationItem.titleView
. Bunu çözmek için günün 4-5 saatini çılgınca harcadım. İOS 11+ önerilen yaklaşımı takip ederek searchController
,navigation.searchController
benim durumum için doğru değil. Bu searchController / searchBar'ın bulunduğu ekran, özel bir backButton'a sahiptir.
Bunu iOS 10, iOS 11 ve 12'de farklı cihazlarda test ettim. Sadece mecburdum. Bu şeytanı çözmeden eve gidemem. Sıkı teslim tarihim göz önüne alındığında, bugün yapabileceğim en mükemmel şey bu.
Bu yüzden, yaptığım bu sıkı çalışmayı paylaşmak istiyorum, her şeyi istediğiniz yere koymak size kalmış (örneğin, viewModel'inizdeki değişkenler). İşte gidiyor:
İlk ekranımda (diyelim ki bu arama denetleyicisine sahip olmayan ana ekran), bu benim viewDidLoad()
.
self.extendedLayoutIncludesOpaqueBars = true
SearchController'a sahip ikinci ekranımda, bu benim viewDidAppear
.
func viewDidAppear'ı geçersiz kıl (_ animated: Bool) {super.viewDidAppear (animasyonlu)
let systemMajorVersion = ProcessInfo.processInfo.operatingSystemVersion.majorVersion
if systemMajorVersion < 12 {
self.navigationItem.titleView = self.searchController.searchBar
}
if systemMajorVersion >= 11 {
self.extendedLayoutIncludesOpaqueBars = true
UIView.animate(withDuration: 0.3) {
self.navigationController?.navigationBar.setNeedsLayout()
self.navigationController?.navigationBar.layoutIfNeeded()
}
self.tableView.contentInset = UIEdgeInsets(top: -40, left: 0, bottom: 0, right: 0)
if self.viewHadAppeared {
self.tableView.contentInset = .zero
}
}
self.viewHadAppeared = true
}
ve işte searchController'ın beyanı:
lazy var searchController: UISearchController = {
let searchController = UISearchController(searchResultsController: nil)
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.textField?.backgroundColor = .lalaDarkWhiteColor
searchController.searchBar.textField?.tintColor = .lalaDarkGray
searchController.searchBar.backgroundColor = .white
return searchController
}()
Umarım bu bir gün birine yardımcı olur.