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

如何在UIActivityController的圈选区域添加独立于分享内容的图片

UIActivityViewController 预览区添加自定义展示图片(不加入分享内容)实现方案

两种旧方案失效原因

  • 第一种修改ac.tabBarItem.image:tabBarItem是控制器在UITabBar中展示的项,和分享弹窗顶部的预览区域完全无关,所以不会生效。
  • 第二种把图片放入activityItems数组:系统会把数组内的所有元素都识别为待分享内容,所有支持接收图片的分享渠道都会获取到这张图,不符合你仅展示不分享的需求。

正确实现方案(兼容iOS13+,当前主流系统版本均支持)

通过遵守UIActivityItemSource协议自定义分享内容提供器,配合LinkPresentation框架的LPLinkMetadata注入预览资源,预览图仅用于展示,不会被带入实际分享内容。

实现步骤

  1. 导入依赖框架
import LinkPresentation
  1. 自定义分享内容提供器类
class ShareItemProvider: NSObject, UIActivityItemSource {
    /// 实际需要分享的内容,可传文案、链接等
    private let shareContent: Any
    /// 仅用于预览展示的图片
    private let previewImage: UIImage
    /// 预览区域展示的标题
    private let previewTitle: String

    init(shareContent: Any, previewImage: UIImage, previewTitle: String) {
        self.shareContent = shareContent
        self.previewImage = previewImage
        self.previewTitle = previewTitle
        super.init()
    }

    /// 返回实际分享内容的占位类型
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        shareContent
    }

    /// 返回给到分享渠道的实际内容,不含预览图
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
        shareContent
    }

    /// 返回分享弹窗预览区域的元数据,此处配置的内容仅做展示,不会参与分享
    func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
        let metadata = LPLinkMetadata()
        metadata.title = previewTitle
        // 设置预览区域的展示图片
        metadata.imageProvider = NSItemProvider(object: previewImage)
        // 可选:设置小图标也为你的logo
        metadata.iconProvider = NSItemProvider(object: previewImage)
        return metadata
    }
}
  1. 初始化并弹出UIActivityViewController
// 准备实际分享内容:文案+链接,不包含预览图
let shareText = "你觉得我做的uSTADIUM App怎么样?快来注册和我一起互动吧!"
guard let shareUrl = URL(string: "你的分享链接地址"), 
      let previewImage = UIImage(named: "uLogo") else { return }

// 初始化自定义提供器
let shareProvider = ShareItemProvider(
    shareContent: [shareText, shareUrl],
    previewImage: previewImage,
    previewTitle: "uSTADIUM App分享"
)

// 初始化分享控制器,仅传入自定义提供器即可
let activityVC = UIActivityViewController(activityItems: [shareProvider], applicationActivities: [])

// 正常弹出控制器
present(activityVC, animated: true)

补充说明

如果需要兼容iOS13以下版本,可以通过遍历UIActivityViewController的视图层级找到对应预览区域的控件直接插入图片,但该方法依赖系统内部视图结构,不同系统版本可能有变动,兼容性差,非必要不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:18:01