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

UIActivityViewController的Edit Actions显示为SHARE_SHEET_EDIT_ACTIONS_BUTTON_TITLE问题

UIActivityViewController 底部Edit Actions按钮标题显示异常问题

问题描述

我遇到一个UIActivityViewController相关的异常问题:其底部Edit Actions按钮的标题显示错误,本该展示Edit Actions..,实际却显示为SHARE_SHEET_EDIT_ACTIONS_BUTTON_TITLE。

已排查情况

  • WhatsApp、Instagram等其他第三方应用的该功能表现正常
  • 完全相同的代码在新建的iOS项目中运行无异常
  • 已使用Xcode 13.1版本在iOS 15.0、iOS 14.0及以上系统版本测试
  • 真机和模拟器均完成测试,问题可稳定复现

补充说明

当前出现问题的项目是3年前创建的Objective-C项目。

相关实现代码

NSString* shareText = @"Sharing an eddress with you";
NSURL *website = [NSURL URLWithString:@"http://eddress.co/EDDRSS"];
NSArray *shareArray = @[shareText, website];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:shareArray applicationActivities:nil];
[activityVC setValue:@"Someone shared an eddress with you" forKey:@"subject"];
NSArray *excludeActivities = @[UIActivityTypeAirDrop,
                                   UIActivityTypePrint,
                                   UIActivityTypeAssignToContact,
                                   UIActivityTypeSaveToCameraRoll,
                                   UIActivityTypeAddToReadingList,
                                   UIActivityTypePostToFlickr,
                                   UIActivityTypePostToVimeo];
activityVC.excludedActivityTypes = excludeActivities;
[self presentViewController:activityVC animated:YES completion:nil];

相关截图

问题截图1
问题截图2


问题根因

这个问题是系统本地化字符串查找被拦截导致的:SHARE_SHEET_EDIT_ACTIONS_BUTTON_TITLE是UIKit框架内的本地化key,系统默认会自动将其转换为对应语言的按钮标题,当项目存在自定义全局本地化逻辑时,会优先查找项目内的本地化表,找不到就直接返回了key本身。
常见触发场景有三个:

  1. 老项目全局重写了NSLocalizedString宏,替换为自定义的本地化实现,没有兼容系统框架的本地化查找逻辑
  2. Info.plist中CFBundleAllowMixedLocalizations配置为NO,导致无法加载系统框架的本地化资源
  3. 引入的第三方库修改了全局本地化逻辑,或者存在同名key的错误资源

解决方案

方案1:修复自定义本地化逻辑(最推荐)

全局搜索项目中是否有重写NSLocalizedString的宏定义,通常格式如下:

#define NSLocalizedString(key, comment) CustomLocalizedString(key, comment)

修改对应的自定义本地化方法,增加系统框架 fallback 逻辑:

NSString *CustomLocalizedString(NSString *key, NSString *comment) {
    // 先查找项目内的本地化资源
    NSString *localizedValue = [[NSBundle mainBundle] localizedStringForKey:key value:nil table:nil];
    // 项目内找不到对应key,回退到UIKit框架的本地化资源查找
    if ([localizedValue isEqualToString:key]) {
        NSBundle *uiKitBundle = [NSBundle bundleForClass:[UIActivityViewController class]];
        localizedValue = [uiKitBundle localizedStringForKey:key value:key table:nil];
    }
    return localizedValue;
}

方案2:修正Info.plist配置

在Info.plist中添加CFBundleAllowMixedLocalizations字段,值设为YES,允许应用加载系统框架的本地化资源,不受项目本身本地化语言列表限制。

方案3:临时兜底修复

如果无法快速定位根因,可以通过运行时遍历视图的方式强制修改按钮标题,在弹出分享页的completion回调中执行即可:

[self presentViewController:activityVC animated:YES completion:^{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self fixEditButtonTitleInView:activityVC.view];
    });
}];

// 遍历查找按钮并修改标题
- (void)fixEditButtonTitleInView:(UIView *)parentView {
    for (UIView *subview in parentView.subviews) {
        if ([subview isKindOfClass:[UIButton class]]) {
            UIButton *button = (UIButton *)subview;
            if ([button.titleLabel.text isEqualToString:@"SHARE_SHEET_EDIT_ACTIONS_BUTTON_TITLE"]) {
                [button setTitle:@"Edit Actions..." forState:UIControlStateNormal];
                return;
            }
        }
        [self fixEditButtonTitleInView:subview];
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:00