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

标签 ios uibarbuttonitem ios13

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

  • UIBar外观
  • UINavigationBar外观
  • UIBarButtonItemAppearance
  • UIBarButtonItemState外观

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

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

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

最佳答案

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

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

唯一的问题是它为后退按钮项分配了相同的背景图像。因此,如果这不是您想要的,您必须进行防御性编码,为后退按钮项分配一个空(而不是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 - 如何在iOS 13中全局设置栏按钮项目背景图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57419856/

相关文章:

ios - UIView 应该捕获点击事件但传递移动事件

ios - UIBarButtonItem 让我的 iPhone 应用崩溃

ios - 无法禁用 UIBarButtonItem

ios - 不可能更改 UIBarButtonItem 标题?

javascript - 防止在 iOS 13/Mobile Safari 上点击并按住文本选择

ios - Wowza 直播问题

iphone - 如何防止在挂接 SpringBoard 时自动锁屏?

permissions - 有没有办法在iOS13中主动触发.always coreLocation权限?

ios - 应用程序卡在带有 Xcode 11 beta 的 iOS 13 beta 模拟器上,但在带有 Xcode 10 的 iOS 13 beta 模拟器上运行良好

ios - 打开 iPhone/iPad 设置面板