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

iOS 15+ UITabBarItem长标题重叠,如何恢复iOS15前自动适配行为?

iOS 15+ 恢复UITabBar长标题自动适配行为

iOS 15之后,显式设置UITabBarAppearance会覆盖系统原有的标题自动缩放逻辑,导致长标题直接重叠。要复现iOS 15前的自适应行为,需要在配置UITabBarAppearance时,手动开启标题文本的字体缩放,并设置合理的截断/换行策略。

解决方案代码(Objective-C)

替换你当前的Appearance设置代码,改为以下完整配置:

// 初始化TabBar外观
UITabBarAppearance *tabBarAppearance = [[UITabBarAppearance alloc] init];

// 配置单个TabBarItem的外观
UITabBarItemAppearance *itemAppearance = [[UITabBarItemAppearance alloc] init];

// 设置标题文本的自适应规则
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; // 优先截断尾部,也可改为NSLineBreakByWordWrapping允许换行

NSDictionary *textAttrs = @{
    NSFontAttributeName: [UIFont systemFontOfSize:10], // 基础字体大小
    NSForegroundColorAttributeName: [UIColor darkTextColor],
    NSParagraphStyleAttributeName: paragraphStyle,
    NSMinimumScaleFactorAttributeName: @0.5 // 允许字体缩小到原大小的50%,可按需调整
};

// 给正常、选中状态统一设置文本属性
[itemAppearance.normal setTitleTextAttributes:textAttrs];
[itemAppearance.selected setTitleTextAttributes:textAttrs];

// 将Item外观绑定到TabBar外观
tabBarAppearance.stackedLayoutAppearance = itemAppearance;

// 同时设置standard和scrollEdge两种场景的Appearance
[[UITabBar appearance] setStandardAppearance:tabBarAppearance];
[[UITabBar appearance] setScrollEdgeAppearance:tabBarAppearance];

关键说明

  • 必须同时设置standardAppearance和scrollEdgeAppearance:iOS 15+会根据页面是否滚动到顶部,切换使用这两种外观,只设置其中一个可能导致部分场景失效。
  • 字体缩放比例:NSMinimumScaleFactorAttributeName控制标题能缩小的最小比例,建议设置在0.5-0.7之间,平衡可读性和避免重叠。
  • 换行模式:如果希望标题换行显示,将NSLineBreakByTruncatingTail改为NSLineBreakByWordWrapping,但注意默认TabBar高度有限,换行后可能显示不全,需结合调整TabBar高度或字体大小。
  • 避免使用performSelector:直接调用官方APIsetScrollEdgeAppearance:更安全,不会有运行时方法找不到的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:53:24