2016-08-19 12 views
6

मैं HTML सामग्री के साथ एक टेक्स्टव्यू प्रस्तुत कर रहा हूं। मैंने कुछ "div" टैग लिया है और उन पर कुछ सीएसएस लगाया है। मुझे एक सीएसएस वर्ग का उपयोग करके "div" पर पैडिंग लगाने के दौरान एक समस्या का सामना करना पड़ा जो टेक्स्टव्यू पर प्रतिपादन के बाद div पर प्रतिबिंबित नहीं कर रहा है। मैंने एचटीएमएल सामग्री स्ट्रिंग को एक जिम्मेदार स्ट्रिंग में कनवर्ट करने के लिए निम्न विधि का उपयोग किया।HTML पर सीएसएस के माध्यम से पैडिंग टेक्स्टव्यू के लिए जिम्मेदार पाठ

if let htmlData = htmlContent.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true) { 
    do { 
     return try NSMutableAttributedString(
         data: htmlData, 
         options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
         documentAttributes: nil) 
    } 
    catch let error as NSError { 
     printDebuggingMode("Couldn't translate \(htmlContent): \(error.localizedDescription) ") 
    } 
} 

मैं टेक्स्टव्यू में छवि में नीचे दिए गए जैसा कुछ हासिल करना चाहता हूं।

.padding { 
    padding-left: 20px; 
} 
+0

एचटीएमएल NSAttributedString' वास्तव में केवल हल्के रूपांतरण के लिए काम करता है: कि तरह आप दूसरे UITextView इस तरह के सन्निवेश वाली समायोजित करने में सक्षम हो जाएगा। उस पर एक संक्षिप्त चर्चा के लिए [यहां] देखें (http://ericasadun.com/2015/08/24/css-and-attributed-strings/)। क्या आपने 'UIWebView' या 'WKWebView' का उपयोग करने का प्रयास किया है? – beyowulf

+0

@beyowulf, वास्तव में मुझे कुछ HTML सामग्री अनुभाग को दिखाने की आवश्यकता है इसलिए मैंने tableviewCell के अंदर टेक्स्टव्यू लिया है। इसलिए अनुभाग शीर्षलेख वाले प्रत्येक अनुभाग में टेक्स्टव्यू के साथ एक कच्चा है जहां मुझे HTML सामग्री प्रस्तुत करना है जिसमें सीएसएस भी है। मैंने टेक्स्टव्यू लिया क्योंकि 1. uiTableViewAutomaticDimension टेक्स्टव्यू सामग्री के अनुसार पंक्ति हाइट समायोज्य बनाता है, 2. मुझे हाइलाइट के लिए टेक्स्ट चयन प्रदान करना होगा। – Nitesh

+0

ठीक है। खैर, 'UIWebView' और 'WKWebView' जैसे' UITextView' में कोई आंतरिक सामग्री आकार नहीं है, इसलिए मुझे यकीन नहीं है कि यह स्वचालित आयाम के साथ _more_ सहायक कैसे है। और, पाठ वेब दृश्यों में भी चुनिंदा है, लेकिन संपादन योग्य नहीं है। – beyowulf

उत्तर

0

समस्या यह है कि UITextViewगद्दी HTML सामग्री के अंदर विशेषताओं का समर्थन नहीं करता है। इस बात को ध्यान में रखते हुए आपके पास दो विकल्प हैं:

एक ओर, UIWebView का उपयोग करें, जैसा कि उत्तरों में सुझाया गया है। आपके पास UITextView जैसा ही कार्यक्षमता होगी, लेकिन आपको इस तरह के कुछ का उपयोग करके अपने टेक्स्ट की ऊंचाई की गणना करनी होगी:

यह विधि UITextView के इन्सेट पर विचार किए बिना ऊंचाई लौटाती है, आपको जोड़ने की आवश्यकता होगी बाद में

func heightForText(text: String?, width: CGFloat) -> CGFloat { 

    //Get attributed text from string 
    let attributedText = text?.toHtmlTextWithAttributes() 

    if let attributedText = attributedText { 
     let rect = attributedText.boundingRectWithSize(
      CGSizeMake(width, CGFloat.max), 
      options: [.UsesLineFragmentOrigin, .UsesFontLeading], 
      context: nil) 
     return rect.height 
    } 

    //Return any default height 
    return 100 
} 

यहाँ String विस्तार जो NSAttributedString में पाठ बदल देती है।

extension String { 
    public func toHtmlTextWithAttributes() -> NSAttributedString? { 

     let encodedData = self.dataUsingEncoding(NSUTF8StringEncoding) 

     if let data = encodedData { 

      let paragrahpStyle = NSMutableParagraphStyle() 
      paragrahpStyle.lineBreakMode = .ByWordWrapping 
      let attributes: [String: NSObject] = [ 
       NSParagraphStyleAttributeName: paragrahpStyle, 
       NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
       NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding 
      ] 

      return try! NSAttributedString(data: data, options: attributes, documentAttributes: nil) 
     } 

     return nil 
    } 
} 

इसके अलावा UITableViewAutomaticDimension के उपयोग अनुशंसित नहीं है, क्योंकि काफी बड़ी सूचियों में यह प्रदर्शन के मुद्दों को जन्म दे सकती।

दूसरी ओर, यदि आपको सभी माध्यमों से UITextView का उपयोग करने की आवश्यकता है, तो आप HTML को पार्स कर सकते हैं, शीर्षक और अनुच्छेद निकालें और उन्हें दो अलग UITextView में प्रदर्शित कर सकते हैं। `को

textView.textContainerInset = UIEdgeInsetsMake(0, 20, 0, 0) 
संबंधित मुद्दे