ios - UINavigationController + UISearchController
问题描述
概括
UINavigationController
当孩子嵌入到导航项的搜索控制器中UIViewController
时,会显示损坏的动画。UISearchController
仅当我UISearchController
在导航项中设置时才会发生这种情况。
下图中有 2 个示例:
- 更改位置
ViewController
- 单击Back
(设置)按钮时有动画延迟。 - 自定义
ViewController
- 工作正常。
流动
UITableViewController > UIViewController 与 UISearchController 嵌入在导航项中
发现
我研究了这种行为,发现了一些描述类似行为但与我设置的不完全相同的答案。
尝试通过将导航项搜索控制器设置为来实现以下帖子中建议的解决方案nil
- 没有解决此问题:
NavigationItem 中嵌入的 UISearchBar 动画损坏
代码如下。提前致谢。
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
}
}
解决方案
设置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
}
}
推荐阅读
- java - Maven 不解析父 POM 文件
- python - 无法导入 RollingOLS:ModuleNotFoundError:没有名为“statsmodels.regression.rolling”的模块
- javascript - 我正在使用 react-admin 依赖项,但编辑不起作用
- python - 判断一个句子是积极的、中性的还是消极的?
- python - Python:类型错误'float'对象不可迭代
- powershell - 如何使用拆分和子字符串以及 foreach 处理数组
- flutter - 如何在颤动中为 DraggableScrollableSheet 提供精确的高度值?
- python - 为什么keras会跳过保存检查点?
- javascript - 如何使用 JavaScript 进行表单验证?
- sharepoint - 用于上传文件并复制到 Ms 团队的 Sharepoint API