iOS13 如何全局设置条形按钮项目背景图片
How to set bar button item background image globally in iOS 13
iOS 13 有一套全新的 类 用于配置导航栏和栏按钮项目:
- UIBar外观
- UINavigationBarAppearance
- UIBarButtonItemAppearance
- UIBarButtonItemStateAppearance
如何使用它们为栏按钮项目提供全局外观?比方说,我希望所有的条形按钮项目都有一个共同的背景图像。我曾经说过:
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
唯一的问题是它将相同的背景图像分配给 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 有一套全新的 类 用于配置导航栏和栏按钮项目:
- UIBar外观
- UINavigationBarAppearance
- UIBarButtonItemAppearance
- UIBarButtonItemStateAppearance
如何使用它们为栏按钮项目提供全局外观?比方说,我希望所有的条形按钮项目都有一个共同的背景图像。我曾经说过:
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
唯一的问题是它将相同的背景图像分配给 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