Как добавить вложение изображения в AttributedString?
я работаю над заменойNSAttributedString
сAttributedString
но не удалось заставить вложения работать. Изображение не отображается в строке, несмотря на то, что я прикрепил вложение.
let textAttachment = NSTextAttachment(image: UIImage(systemName: "exclamationmark.triangle.fill")!)
textAttachment.accessibilityLabel = "Warning"
// Original code
label.attributedText = NSAttributedString(attachment: textAttachment)
// New code
var attributedString = AttributedString()
attributedString.attachment = textAttachment
label.attributedText = NSAttributedString(attributedString)
1 ответ
NSAttributedString(attachment:)
волшебным образом создаетNSAttributedString
с одним символом (NSAttachmentCharacter
который является U+FFFC OBJECT REPLACEMENT CHARACTER) и применяет атрибут вложения текста, чтобы заменить этот символ изображением.
С новымAttributedString
API, который вам нужно будет воспроизвести вручную:
let textAttachment = NSTextAttachment(image: UIImage(systemName: "exclamationmark.triangle.fill")!)
textAttachment.accessibilityLabel = "Warning"
let attributedString = AttributedString("\(UnicodeScalar(NSTextAttachment.character)!)", attributes: AttributeContainer.attachment(textAttachment))
label.attributedText = NSAttributedString(attributedString)
Вот пример замены подстроки изображением:
let addString = "+"
let string = "Tap \(addString) to add a task."
let addTextAttachment = NSTextAttachment(image: UIImage(systemName: "plus.square")!)
// NSAttributedString
label.attributedText = {
let attributedString = NSMutableAttributedString(string: string)
attributedString.replaceCharacters(in: (attributedString.string as NSString).range(of: addString), with: NSAttributedString(attachment: addTextAttachment))
return attributedString
}()
// AttributedString
label.attributedText = {
var attributedString = AttributedString(string)
let attachmentString = AttributedString("\(UnicodeScalar(NSTextAttachment.character)!)", attributes: AttributeContainer.attachment(addTextAttachment))
attributedString.replaceSubrange(attributedString.range(of: addString)!, with: attachmentString)
return NSAttributedString(attributedString)
}()