搜索时状态栏变色

Posted

技术标签:

【中文标题】搜索时状态栏变色【英文标题】:Status bar changes color when searching 【发布时间】:2015-08-26 19:07:52 【问题描述】:

我正在使用UISearchController,单击它会使导航栏上升并将状态栏变为白色。我希望状态栏保持绿色。

我的UISearchController 实现:

self.resultSearchController = (
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.searchBar.placeholder = "Pesquisa por linha ou cod..."
        controller.searchBar.tintColor = UIColor(netHex: 0xFFFFFF)
        controller.searchBar.barTintColor = UIColor(netHex: 0x2F7C30)
        controller.searchBar.clipsToBounds = true
        controller.searchBar.layer.borderWidth = 1;
        controller.searchBar.layer.borderColor = UIColor(netHex: 0x2F7C30).CGColor
        self.navigationController!.view.backgroundColor = UIColor(netHex: 0x2F7C30)

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    )()

在点击搜索栏之前

点击搜索栏后

【问题讨论】:

你最初是如何设置状态栏的颜色的? 我正在我的 NavigationController 上设置导航栏背景颜色。 【参考方案1】:

利用 Daniel Storm 的回应。将子视图添加到 UISearchController 的视图为我解决了这个问题。

let statusBarView = UIView(frame: CGRectMake(0, 0,
    UIApplication.sharedApplication().statusBarFrame.size.width,
    UIApplication.sharedApplication().statusBarFrame.size.height))
statusBarView.backgroundColor = Colors.Primary.Regular
searchController.view.addSubview(statusBarView)

【讨论】:

【参考方案2】:

在状态栏后面加上你需要的背景颜色UIView

let statusBarView = UIView(frame: UIApplication.sharedApplication().statusBarFrame)
statusBarView.backgroundColor = UIColor.greenColor() // Replace with color you desire
view.addSubview(statusBarView)

【讨论】:

没用。该视图出现在导航栏下方和搜索栏前面。当点击搜索栏时,视图消失了? @MarcioGranzotto 如果您在搜索栏激活时调用self.view.bringSubviewToFront(statusBarView) 会怎样?【参考方案3】:

通过设置

滚动边缘外观

按钮外观

后退按钮外观

对我来说很好,这里是代码 sn-p

func setNavigationBarAppreance()

            let navBar = UINavigationBar.appearance()
    
            let navigationBarAppearance = UINavigationBarAppearance()
   
            navigationBarAppearance.configureWithOpaqueBackground()
            navigationBarAppearance.backgroundColor = .primary // replace your desired color
            navigationBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.navigationBarTintColor]
            navigationBarAppearance.shadowImage = UIImage()
            navigationBarAppearance.backgroundImage = UIImage()

            navBar.scrollEdgeAppearance = navigationBarAppearance
            navBar.compactAppearance = navigationBarAppearance
            navBar.standardAppearance = navigationBarAppearance
            navBar.isTranslucent = false
            navBar.tintColor = .navigationBarTintColor
            navBar.barTintColor = .navBarColor

只需在所需的 Viewcontrollers 中使用此功能,也可以将其放入 AppDelegate 文件中进行全局外观设置

【讨论】:

【参考方案4】:

navigationImage 设置 backgroundImage 就足够了

navigationController?.navigationBar.setBackgroundImage(UIImage(from: UIColor(hexString: kMainColorHex, alpha: 1)), for: .any, barMetrics: .default)

【讨论】:

【参考方案5】:

试试这个:

self.navigationController?.navigationBar.isTranslucent = false

【讨论】:

【参考方案6】:

对于 Objective C 版本,您可以使用以下代码:

UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIApplication sharedApplication].statusBarFrame.size.width, [UIApplication sharedApplication].statusBarFrame.size.height)];
statusBarView.backgroundColor = [UIColor searchBarBackgroundColor];

[resultSearchController.view addSubview:statusBarView];

【讨论】:

以上是关于搜索时状态栏变色的主要内容,如果未能解决你的问题,请参考以下文章

android沉浸式状态栏变色状态栏透明状态栏修改状态栏颜色及透明

Android 实现渐变色状态栏

Android 实现渐变色状态栏

Android开发:隐藏标题|状态栏沉浸|状态栏字体变色(继承AppCompatActivity)

Android开发:隐藏标题|状态栏沉浸|状态栏字体变色(继承AppCompatActivity)

Android开发:隐藏标题|状态栏沉浸|状态栏字体变色(继承AppCompatActivity)