Ada*_*don 4 uinavigationbar uinavigationcontroller pushviewcontroller ios uisearchcontroller
我在导航控制器中有一个表视图,以便我可以将详细视图控制器推送到堆栈上。它工作正常,直到我向导航项添加搜索控制器,如下所示:
searchController = UISearchController(searchResultsController: nil)
searchController.obscuresBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.delegate = self
searchController.searchBar.tintColor = Colors.mlLabel
navigationItem.searchController = searchController
definesPresentationContext = true
Run Code Online (Sandbox Code Playgroud)
它导致临时灰色背景,见下文:
在调试视图层次结构时,看起来UIViewControllerWrapperView's _UIParallaxDimmingView(在下面选择)是导致这种情况的原因,因为导航栏和状态栏都是透明的。
我怎样才能解决这个问题?
注意:将animated属性设置pushViewController()为false有效,但我想保留动画。
更新:这似乎只在 iOS 13 上有问题。甚至可能来自最近的某个版本,因为我之前没有这个问题。
更新 2:我现在在我的应用程序中的多个地方都注意到了同样的问题,而且它不仅仅是与SearchController. 基本上_UIParallaxDimmingView它的鼻子伸出来。
这是我用来从大标题到小标题的代码。这些是大标题视图控制器的属性,或者更具体地说是它的导航控制器:
navigationController.navigationBar.prefersLargeTitles = true
navigationController.topViewController?.extendedLayoutIncludesOpaqueBars = true
Run Code Online (Sandbox Code Playgroud)
也许上面的第二行可能对你有帮助?
至于推送任何视图控制器,我看到我已经覆盖了导航控制器的推送功能(因为我对标签栏中的每个选项卡都使用了导航控制器):
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
if viewControllers.count >= 1 {
viewController.hidesBottomBarWhenPushed = true
viewController.navigationItem.largeTitleDisplayMode = .never
}
super.pushViewController(viewController, animated: animated)
}
Run Code Online (Sandbox Code Playgroud)
我以前在我的生活中看到过几次,它总是必须对视图控制器本身的背景颜色做一些事情。如果它是透明的,你会在动画时看到这些东西。
但由于它是一个搜索控制器,它可能是导航栏。无论如何,由于问题仅从 iOS13 开始,我相信可以使用以下方法解决问题:
searchController.searchBar.backgroundColor = UIColor.clear (or whatever color)
Run Code Online (Sandbox Code Playgroud)
这个新属性 (UISearchBar.searchTextField.backgroundColor) 自 iOS13 以来已添加,所以也许这会为您解决问题?:)
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |