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

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

  • UIBar 外观
  • UINavigationBarAppearance
  • UIBarButtonItemAppearance
  • UIBarButtonItemStateAppearance

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

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

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

【问题讨论】:

    标签: ios uibarbuttonitem ios13


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-06-19
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2013-09-27
      相关资源
      最近更新 更多