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/