导航栏中的灰色背景,在推送期间将 searchController 添加到导航项

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它的鼻子伸出来。

Bob*_*aaf 5

更新

这是我用来从大标题到小标题的代码。这些是大标题视图控制器的属性,或者更具体地说是它的导航控制器:

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 以来已添加,所以也许这会为您解决问题?:)