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
相关产品推荐
相关产品推荐

