摘要
当一个子UINavigationController将一个UISearchController嵌入到导航项的搜索控制器中时,就会显示坏的动画。
只有当我在导航项中设置UISearchController时,才会发生这种情况。
在下面的图片中有两个例子:
ViewController -当点击Back (设置)按钮时有动画滞后。ViewController -工作良好。流
UITableViewController > UIViewController,在导航项中嵌入UISearchController

发现
我研究了这种行为,并找到了一些描述类似行为的答案,但与我的设置不完全相同。
试图通过将导航项搜索控制器设置为nil来实现以下文章中建议的解决方案--没有解决此行为:
Broken UISearchBar animation embedded in NavigationItem
代码在下面。提前谢谢。
class ChangeLocationViewController: UIViewController {
// MARK: - Outlets
@IBOutlet weak var locationBanner: CustomView!
@IBOutlet weak var locationNameLabel: UILabel!
@IBOutlet weak var locationTimeLabel: UILabel!
@IBOutlet weak var mapView: MKMapView!
let loadingBanner = LoadingBanner()
var resultsViewController: GMSAutocompleteResultsViewController?
var searchController: UISearchController?
let locationManager = LocationManager.shared
override func viewDidLoad() {
super.viewDidLoad()
locationManager.locationManagerDelegate = self
GMSPlacesClient.provideAPIKey(AppSettings.googleAPIKey)
self.definesPresentationContext = true;
resultsViewController = GMSAutocompleteResultsViewController()
resultsViewController?.delegate = self
let autoCompletedFilter = GMSAutocompleteFilter()
autoCompletedFilter.type = .city
resultsViewController?.autocompleteFilter = autoCompletedFilter
searchController = UISearchController(searchResultsController: resultsViewController)
searchController?.searchResultsUpdater = resultsViewController
searchController?.hidesNavigationBarDuringPresentation = false
searchController?.searchBar.placeholder = "Search a place".localized
searchController?.delegate = self
// Setting the search controller [when it is not set, everything works great :)]
navigationItem.searchController = searchController
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Removing the search controller
self.navigationItem.searchController = nil
}
}发布于 2019-08-28 15:02:06
当其他视图控制器也出现时,将navigationItem.searchController设置为nil。
class ChangeLocationViewController: UIViewController {
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
/* searchController */
searchController.isActive = false
navigationItem.searchController = nil
}
}
class SettingsTableController: UITableViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
/* searchController */
navigationItem.searchController = nil
}
}https://stackoverflow.com/questions/57694602
复制相似问题