iOS 11搜索栏动画bug

时间:2018-03-11 13:10:08

标签: ios uinavigationcontroller uisearchbar

我的搜索控制器附加到导航项目,并带有自定义搜索栏样式(颜色)。这是代码:

    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = false

    let bar = searchController.searchBar
    bar.placeholder = "Search songs"
    bar.backgroundImage = .transparentPixel // transparent UIImage of size 1x1
    bar.backgroundColor = UIColor(red: 0.02, green: 0.04, blue: 0.06, alpha: 1)
    bar.tintColor = .white
    bar.barTintColor = UIColor(red: 0.02, green: 0.04, blue: 0.06, alpha: 1)
    bar.isTranslucent = false
    bar.barStyle = .default
    bar.showsCancelButton = true

    definesPresentationContext = true

然后我将它添加到控制器:

    if #available(iOS 11.0, *) {
        controller.navigationItem.searchController = searchController
        controller.navigationItem.hidesSearchBarWhenScrolling = false
    } else {
        // Fallback on earlier versions
        tableView.tableHeaderView = searchController.searchBar
    }

当我在动画期间导航到该控制器一小段时间时,搜索栏显示白色而不是我设置的颜色。不确定这些是默认样式还是仅一种白色背景颜色。这是视频:

enter image description here

在调试视图层次结构期间,我发现了一个白色背景,不确定它是否与问题有关:

enter image description here enter image description here

更新:用于搜索的官方Apple示例代码(可以找到here)也存在类似问题。此外,它会在搜索栏下方显示黑色区域,同时设置推送新控制器的动画。我已将窗口的背景颜色更改为红色并改为显示红色:

enter image description here

在我的情况下,我没有白色背景的窗口或视图。如果有人遇到这个问题以及如何解决这个问题会很有趣。

2 个答案:

答案 0 :(得分:1)

我通过删除背景图像设置修复了相同的错误

navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

答案 1 :(得分:0)

尝试一下。

self.extendedLayoutIncludesOpaqueBars = YES;

我在下面找到了这个解决方案。

iOS 11 UIRefreshControl with NavigationBar LargeTitle and SearchController disappearing