SwiftUI中使用ShareLink实现适配短信与邮件的带URL链接格式化文本问题求助
大家好,我现在遇到一个SwiftUI ShareLink的使用问题,想请教下有没有可行的解决方案:
我想要用ShareLink让用户发送包含URL链接的格式化邮件或短信,目前我的实现代码如下:
ShareLink( item: itemText, subject: Text("Message from app user"), preview: SharePreview("Link", image: "AppIcon") ) { Label(message, systemImage: "square.and.arrow.up") }
其中itemText是通过itemText(link: URL)方法生成的,我把相关的文本生成逻辑精简后如下:
func shareItemMessage(link: URL) -> String { return "Please join me on our app\n\n" + "Tap on [link](\(link)) to accept my invitation (link: \(link)).\n\n" } func itemText(link: URL) -> (some Transferable)? { // 仅iOS 16.1及以上版本,AttributedString才遵循Transferable协议 if #available(iOS 16.1, *) { // 这里的Markdown解析选项是为了保留文本中的空格和换行格式 return try? AttributedString(markdown: shareItemMessage(link: link), options: AttributedString.MarkdownParsingOptions( allowsExtendedAttributes: false, interpretedSyntax: .inlineOnlyPreservingWhitespace, failurePolicy: .returnPartiallyParsedIfPossible, languageCode: nil ) ) } else { return shareItemMessage(link: link) } }
现在遇到了两个问题:
- 当用户选择短信应用分享时,Markdown格式会被完全剥离,链接无法显示为可点击的样式
- 当用户选择邮件应用分享时,会出现两个重复的链接(一个是Markdown解析后的可点击链接,一个是纯文本形式的URL)
我是在iOS 16.1以上的设备上测试的,所以两种场景都是用AttributedString来处理文本格式化的。
有没有哪位朋友遇到过类似的问题,或者有更好的实现方式,能让ShareLink发送的短信和邮件都能正确显示带单个可点击链接的格式化文本呢?
备注:内容来源于stack exchange,提问作者Chris Prince
相关产品推荐
相关产品推荐

