我使用TextView显示照片,一切正常,但为什么,在iPhone上,加上版本不显示带照片的文字,谁知道可能是什么原因?
override func viewDidLoad() {
super.viewDidLoad()
textView.attributedText = detail?.text?.html2AttributedString
textView.attributedText.correctimage(textView: text, SV: view)
}
下载照片并处理html文本
extension String {
var html2AttributedString: NSAttributedString? {
do {
return try NSAttributedString(data: Data(utf8), options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
} catch {
print("error:", error)
return nil
}
}
var html2String: String {
return html2AttributedString?.string ?? ""
}
}
在文本中查找照片并将其设置为
extension NSAttributedString {
func correctimage(textView:UITextView, SV:Any){
textView.font = UIFont(name: "roboto-light", size: 19)
textView.attributedText.enumerateAttribute(NSAttributedStringKey.attachment, in: NSRange(location: 0, length: textView.attributedText.length), options: [], using: {(value,range,stop) -> Void in
if (value is NSTextAttachment) {
let attachment: NSTextAttachment? = (value as? NSTextAttachment)
if ((attachment?.image) != nil) {
attachment?.bounds.origin = CGPoint(x: (SV as AnyObject).frame.size.width - 20, y: 20)
attachment?.bounds.size = CGSize(width: (SV as AnyObject).frame.size.width - 25, height: 250)
}
}
})
}
修改
我的代码适用于所有iphone型号,但不适用于带有plus模型的模拟器
答案 0 :(得分:2)
检查一下,我的一方为我工作
func convertToInlineImageFormat(htmlStrr:String) -> NSMutableAttributedString {
let htmlStringgg = htmlStrr as String
let content = try! NSMutableAttributedString(
data: htmlStringgg.data(using: String.Encoding.unicode, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
// content.addAttribute(NSForegroundColorAttributeName, value: UIColor.white, range: NSRange(location: 0, length: htmlStrr.length))
// Resizing Inline images
content.enumerateAttribute(NSAttachmentAttributeName, in: NSMakeRange(0, content.length), options: NSAttributedString.EnumerationOptions.init(rawValue: 0), using: { (value, range, stop) -> Void in
if let attachement = value as? NSTextAttachment {
let image = attachement.image(forBounds: attachement.bounds, textContainer: NSTextContainer(), characterIndex: range.location)
let screenSize: CGRect = UIScreen.main.bounds
if (image?.size.width)! > screenSize.width - 2 {
let newImage = image?.resizeImage(scale: (screenSize.width - 2)/(image?.size.width)!)
let newAttribut = NSTextAttachment()
newAttribut.image = newImage
content.addAttribute(NSAttachmentAttributeName, value: newAttribut, range: range)
}
}
// ARTICLE DESCRIPTION FONT
// let replacementFont = Contants.descFont
let fontSizeDescribtion = UserDefaults.standard.float(forKey: "FontSize")
var fontSize :Float = 0.0
if fontSizeDescribtion == 0{
fontSize = 21
}else{
fontSize = Float(fontSizeDescribtion)
}
let fontDesc = UIFont(name: Contants.abiramiFont, size: CGFloat(Float(fontSize)))
content.addAttribute(NSFontAttributeName, value: fontDesc!, range: NSRange(location: 0, length: content.length))
content.addAttribute(NSForegroundColorAttributeName, value: UIColor.black, range: NSRange(location: 0, length: content.length))
}) // Content block
return content
}
使用如下:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.descriptionTextView.attributedText = self.convertToInlineImageFormat(htmlStrr: currentData["ArticleXML"] as! String)
}