У меня есть преобразованный attributeText из HTML. Стили были сохранены, например, полужирный или обычный, но формат не был (заголовок 1, заголовок 2 и т. Д.). Для текста были заданы разные заголовки, но выходные данные UILabel игнорируют это и выдают одинаковый размер.
Это предполагаемый формат из API. Вы можете видеть, что тексты 11111111111 меньше, чем 222222222222.
Когда вы видите вывод в iPhone 5S, заголовки игнорировались.
Это вывод в iPhone5S. 11111111111 и 2222222222 имеют одинаковый размер, даже если они в другом формате
Формат 1111111111 - заголовок 1, а 22222222222 - заголовок 2.
Вот код, который я использовал дляпреобразуйте HTML в attributeString и измените стиль шрифта:
import Foundation
import UIKit
extension String {
var htmlToAttributedString: NSAttributedString? {
guard let data = data(using: .utf8) else { return NSAttributedString() }
do {
return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil)
} catch {
return NSAttributedString()
}
}
}
extension NSMutableAttributedString {
func setFontFace(font: UIFont, color: UIColor? = nil) {
beginEditing()
self.enumerateAttribute(
.font,
in: NSRange(location: 0, length: self.length)
) { (value, range, stop) in
if let f = value as? UIFont,
let newFontDescriptor = f.fontDescriptor
.withFamily(font.familyName)
.withSymbolicTraits(f.fontDescriptor.symbolicTraits) {
let newFont = UIFont(
descriptor: newFontDescriptor,
size: font.pointSize
)
removeAttribute(.font, range: range)
addAttribute(.font, value: newFont, range: range)
if let color = color {
removeAttribute(
.foregroundColor,
range: range
)
addAttribute(
.foregroundColor,
value: color,
range: range
)
}
}
}
endEditing()
}
}
import ImageViewer
import UIKit
class HomeDetailsViewController: UIViewController {
// MARK: - Stored
private var feed: Feed?
private func showFeedDetails() {
categoryName.text = feed?.category
dateLabel.text = feed?.datePosted
let mutableAttributedString = NSMutableAttributedString.init(attributedString: (feed?.body?.htmlToAttributedString)!); mutableAttributedString.setFontFace(font: UIFont(name: "Raleway", size: 13)!);
detailsLabel.attributedText = mutableAttributedString
collectionView.reloadData()
startCollectionViewTimer()
}
}
Вот модель:
import Foundation
struct Feed: Codable {
var id: Int
var title: String?
var category: String?
var imageList: [String]?
var bodyPreview: String?
var body: String?
var datePosted: String?
var youtubeLink: String?
private enum CodingKeys: String, CodingKey {
case id
case title
case category
case imageList = "images_url"
case bodyPreview = "preview_body"
case body
case datePosted = "date_posted"
case youtubeLink = "youtube_link"
}
}