Моя проблема разделена на несколько проблемные области
- Я хочу отобразить текстовую ссылку с использованием уценки в текстовом представлении в SwiftUI
- Я хочу, чтобы метка этой ссылки содержала изображение рядом с текстом, чтобы текст и изображение были одновременно кликабельно
- Мне нужно, чтобы это было сделано внутри текстового представления, которое затем можно было бы добавить в конец другого текстового представления.
У меня есть несколько абзацев текста, каждый из которых взят из определенного источника, на который я хочу предоставить ссылку. Ссылка должна быть встроена в текст и находиться в конце каждого абзаца и иметь формат «Источник ». Я считаю, что поддержка уценки в SwiftUI — это самый простой способ добиться этого, поскольку она позволяет простому текстовому представлению содержать гиперссылку, выполнив: Text(.init("[Source](https://example.com)"))< /код>. Это продвинуло меня довольно далеко, но я упустил решающий шаг — включение значка в метку ссылки. На данный момент я был вынужден добавить значок после фактического текста ссылки, как показано в примере ниже.
Поэтому мой вопрос сводится к следующему: есть ли способ отобразить изображение внутри строку уценки в SwiftUI?
Упрощенный пример настройки моего кода
import SwiftUI
struct Paragraph {
text: String
url: String
}
struct ParagraphView: View {
let paragraph: Paragraph
var body: some View {
Text(paragraph.text)
// Less than ideal solution I have currently
+ Text(.init(" [Source](\(paragraph.url)) "))
+ Text(Image(systemName: "star")) // Example icon
}
}
В идеале мне бы хотелось сделать что-то вроде этого
struct ParagraphView: View {
let paragraph: Paragraph
var body: some View {
Text(paragraph.text)
+ Text(.init(" [Source \(IMAGE)](\(paragraph.url))"))
}
}
Для этого я пробовал использовать AttributedString и NSAttributedString
struct ParagraphView: View {
let paragraph: Paragraph
var markdown: String {
let str = NSMutableAttributedString(string: " [Source ")
let iconAttachment = NSTextAttachment()
iconAttachment.image = UIImage(systemName: "star")
let iconText = NSAttributedString(attachment: iconAttachment)
str.append(iconText)
str.append(NSAttributedString(string: "](\(paragraph.url))"))
return str.string
}
var body: some View {
Text(paragraph.text)
// Link works, but image is not rendered
+ Text(.init(markdown))
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... kdown-text
Мобильная версия