如何在 iOS 13 中全局设置栏按钮项背景图像

Posted

技术标签:

【中文标题】如何在 iOS 13 中全局设置栏按钮项背景图像【英文标题】:How to set bar button item background image globally in iOS 13 【发布时间】:2019-08-08 20:04:29 【问题描述】:

ios 13 有一套全新的类用于配置导航栏和栏按钮项:

UIBar 外观 UINavigationBarAppearance UIBarButtonItemAppearance UIBarButtonItemStateAppearance

如何使用这些为栏按钮项提供全局外观?假设我希望所有条形按钮项目都有一个共同的背景图像。我曾经说过:

UIBarButtonItem.appearance().setBackgroundImage(im, for:.normal, barMetrics:.default)

这似乎正是这些新类所取代的内容。那么现在正确的方法是什么?

【问题讨论】:

【参考方案1】:

它很冗长,但在某些方面它更清晰。您可以配置一个导航栏外观,并通过代理将其分配给导航栏的standardAppearance

    let app = UIBarButtonItemAppearance()
    app.normal.backgroundImage = im
    let navbarapp = UINavigationBarAppearance()
    navbarapp.configureWithOpaqueBackground()
    navbarapp.buttonAppearance = app
    UINavigationBar.appearance().standardAppearance = navbarapp

唯一的问题是它为 back 按钮项分配了相同的背景图像。因此,如果不希望这样做,您必须进行防御性编码,将返回按钮项分配一个空的(不是nil)图像:

    let app = UIBarButtonItemAppearance()
    app.normal.backgroundImage = im
    let navbarapp = UINavigationBarAppearance()
    navbarapp.configureWithOpaqueBackground()
    navbarapp.buttonAppearance = app
    let back = UIBarButtonItemAppearance()
    back.normal.backgroundImage = UIImage() // prevent back button item
    navbarapp.backButtonAppearance = back
    UINavigationBar.appearance().standardAppearance = navbarapp

【讨论】:

以上是关于如何在 iOS 13 中全局设置栏按钮项背景图像的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 11 中使用大标题时调整栏按钮项的位置

如何在ios中更改标签栏项目的背景图像?

如何更改 iOS 13 导航栏中的后退按钮图像?

navcontroller - 将导航项设置为图像

在导航栏中添加彩色图像作为右栏按钮项

导航栏按钮单击事件在单击其下方区域时触发。