Размер шрифта Swift AttributedString изменяется на .76666 (повторяющийся) при сохранении в RTF через NSAttributedString
iOS 16.2. X-код 14.2.
Блок ниже представляет собой простое создание и сохранение AttributedString.
Две функции AttributedExtensions для пользовательского append() и Bold().
Текст сохраняется как файл RTF с использованием NSAttributedString.
Я удалил проверку ошибок.
var atr = AttributedString()
atr.append("Text 18\n", fontSize: 18)
atr.append(AttributedString.Bold("Bold Text 24", fontSize: 24)!)
if let rtfURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("file.rtf") {
let nsa = NSAttributedString(atr)
let data = try! nsa.data(from: NSRange(location: 0, length: nsa.length), documentAttributes: [NSAttributedString.DocumentAttributeKey.documentType : NSAttributedString.DocumentType.rtf])
try data.write(to: url, options: Data.WritingOptions.atomic)
}
extension AttributedString {
mutating func append(_ s: String, fontName: String = "Helvetica", fontSize: CGFloat = 12, colour: UnvColour = .black) {
#if os(macOS)
guard let font = NSFontManager.shared.font(withFamily: fontName, size: fontSize) else { return }
#else
guard let font = UIFont(name: fontName, size: fontSize) else { return }
#endif
let cont = AttributeContainer([NSAttributedString.Key.font : font, NSAttributedString.Key.foregroundColor : colour] )
self.append(AttributedString(s, attributes: cont))
}
static func Bold(_ s: String, colour: UnvColour = .black, fontName: String = "Helvetica", fontSize: CGFloat = 12) -> AttributedString? {
if s.isEmpty { return AttributedString(s) }
#if os(macOS)
guard let bold = NSFontManager.shared.font(withFamily: fontName, traits: .boldFontMask, weight: 5, size: fontSize) else { return nil }
#else
guard let bold = UIFont(name: fontName, size: fontSize) else { return nil }
#endif
let boldCont = AttributeContainer([NSAttributedString.Key.font : bold, NSAttributedString.Key.foregroundColor : colour] )
var ab = AttributedString(s)
ab.setAttributes(boldCont)
return ab
}
}
Когда файл сохраняется и открывается с помощью TextEdit, размеры шрифта масштабируются на 0,76666666666 (повторяющееся). Размер 18pt теперь равен 13,8pt, а 24pt — 18,4pt.
Отладчик показывает размеры шрифта 24 и 18 перед сохранением.
Это происходит на устройстве iPad и симуляторе iPhone.
Кто-нибудь видел это раньше?