2017-09-26 8 views
3

Ich benutze TextView, um ein Foto anzuzeigen, alles funktioniert gut, aber warum, auf dem iPhone, plus die Version zeigt keinen Text mit Fotos, wer weiß, was könnte der Grund sein?TextView zeigt keinen Text an

override func viewDidLoad() { 
     super.viewDidLoad() 

     textView.attributedText = detail?.text?.html2AttributedString 
     textView.attributedText.correctimage(textView: text, SV: view) 
    } 

Downloads Fotos und verarbeitet HTML-Text

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 ?? "" 
} 



} 

Fotos im Text finden und legen Sie sie die Größe

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) 

      } 
     } 
    }) 

} 

EDIT:

mein Code funktioniert alles auf Iphone-Modelle, aber nicht auf dem Emulator mit Plus-Modell s

+0

Vielleicht hilfreiche Links: https://stackoverflow.com/a/17744938/3883492; https://stackoverflow.com/a/46184150/3883492. Sind Sie sicher, dass der Text nicht zu lang ist und textView ihn nicht rendern konnte? –

+0

@ dvp.petrov auf iphone5,6,7 alle angezeigt – Vasya2014

Antwort

2

Check this out, Meine Seite für mich arbeiten

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 
    } 

Verwendung wie unten:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { 
      self.descriptionTextView.attributedText = self.convertToInlineImageFormat(htmlStrr: currentData["ArticleXML"] as! String) 
     } 
+0

Was meinst du fließen? Sie können hier https://stackoverflow.com/questions/43252440/adjust-font-size-of-nsmutableattributedstring-proportional-to-uilabels-frame-he/43254261#43254261 – karthikeyan

+0

Ich ändere die Größe des Textes, alles verschwindet wieder – Vasya2014

+0

hast du deine lösung bekommen? Aktualisieren Sie Ihre Frage mit Ihrem aktuellen Code .. – karthikeyan