Tôi đã gặp vấn đề tương tự trên ứng dụng của mình, giải pháp của tôi là trong iOS 11, sử dụng cách mới được đề xuất táo cho searchBar trong navigationItem, nếu không, sử dụng cách cũ. Mã của tôi trong viewDidLoad() như sau:
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = false
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
searchViewHeight.constant = 0
} else {
searchView.addSubview(searchController.searchBar)
}
Tôi có hai IBOutlets: SearchView và searchViewHeight:
@IBOutlet var searchView: UIView!
@IBOutlet var searchViewHeight: NSLayoutConstraint! // new added for iOS 11
Trước khi iOS 11, hệ thống cấp bậc viewController của tôi như sau:
Tôi có một searchView mà chiều cao là 44 để chứa tìm kiếm của tôi SearchController'sBar xem. Nó nằm dưới thanh điều hướng.
Trong iOS 11, tôi thêm IBOutlet mới cho ràng buộc chiều cao của searchView và đặt hằng số là 0, ẩn chế độ xem vùng chứa này. Và thêm searchController như một phần của mục điều hướng. tài liệu
Xem táo: https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller
hơn Một điều là dưới iOS 11, màu nền TextField của Searchbar rất ít sẫm màu hơn màu thanh điều hướng theo mặc định.Để thống nhất, bạn có thể thay đổi nó sang màu trắng, mã dưới đây sẽ làm việc cho cả iOS11 và nó trước:
if let textField = searchController.searchBar.value(forKey: "searchField") as? UITextField {
if let backgroundView = textField.subviews.first {
// Search bar textField background color
backgroundView.backgroundColor = UIColor.white
// Search bar textField rounded corner
backgroundView.layer.cornerRadius = 10
backgroundView.clipsToBounds = true
}
}
thấy điều này một lần https://stackoverflow.com/questions/31424540/uisearchcontroller-searchbar-and-scopebar-overlap-on-first-touch-event –
@ Anbu.Karthik Liên kết này được đính kèm bởi Nitish –
Hãy thử với bản thân .definesPresentationContext = true viết dòng này trong chế độ xem của bạnDIdload – Govaadiyo