You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 15下UIBarButtonItem.appearance()全局设置失效如何解决

iOS 15 下UIBarButtonItem全局外观设置失效解决方案

失效原因

从iOS 15开始,苹果推出了全新的导航栏外观管理类UINavigationBarAppearance,旧的直接通过UIBarButtonItem.appearance()设置标题属性的方案不再默认生效,必须搭配新的外观API配置才会全局生效。

适配代码(兼容低版本iOS)

// 统一定义需要设置的标题属性
let attributes = [NSAttributedString.Key.font : UIFont(name:"Futura-Medium", size: 14) as Any]

if #available(iOS 15, *) {
    let navBarAppearance = UINavigationBarAppearance()
    // 根据业务需求选择导航栏背景配置,默认用系统默认背景样式
    navBarAppearance.configureWithDefaultBackground()
    
    // 配置所有普通UIBarButtonItem的状态样式
    navBarAppearance.buttonAppearance.normal.titleTextAttributes = attributes
    navBarAppearance.buttonAppearance.highlighted.titleTextAttributes = attributes
    
    // 若需要单独配置返回按钮样式,可单独设置backButtonAppearance
    // navBarAppearance.backButtonAppearance.normal.titleTextAttributes = customBackAttributes
    
    // 全局赋值导航栏两种状态的外观配置
    UINavigationBar.appearance().standardAppearance = navBarAppearance
    UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
} else {
    // iOS 15以下沿用原有逻辑
    let barButtonItemAppearance = UIBarButtonItem.appearance()
    barButtonItemAppearance.setTitleTextAttributes(attributes, for: .normal)
    barButtonItemAppearance.setTitleTextAttributes(attributes, for: .highlighted)
}

注意事项

  • 上述代码建议在App启动的生命周期方法中调用(比如application(_:didFinishLaunchingWithOptions:)),保证全局生效
  • 如果单个页面需要自定义样式,可单独给当前页面对应的UINavigationBar设置standardAppearance和scrollEdgeAppearance,优先级高于全局配置
  • 若你使用的是UIToolbar上的UIBarButtonItem,同理需要配置UIToolbarAppearance相关属性生效

内容的提问来源于stack exchange,提问作者Chriscoffee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:24:01