2016-08-19 11 views
6

HTMLコンテンツを含むテキストビューをレンダリングしています。私はいくつかの "div"タグを取って、それらにいくつかのCSSを適用しました。私は、 "div"にpaddingを適用する際に問題に直面しました。これは、textviewでのレンダリング後にdivに反映されないCSSクラスを使用していました。 HTMLコンテンツ文字列を属性付き文字列に変換するために、以下のメソッドを使用しました。textViewのHTML属性付きテキストのCSSによるパディングが機能しない

テキストビューの画像に以下のようにしたいと思います。

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

HTML:その方法では、このような二UITextViewのインセットを調整することができるでしょう。その簡単な説明は、[here](http://ericasadun.com/2015/08/24/css-and-attributed-strings/)を参照してください。あなたは 'UIWebView'または' WKWebView'を使ってみましたか? – beyowulf

+0

@beyowulf、実際には私はtableviewCellの内部でtextviewを取ったので、いくつかのHTMLコンテンツを賢明に表示する必要があります。だから、セクションヘッダーを持つ各セクションには、CSSがあるhtmlコンテンツをレンダリングしなければならないtextviewとともにその内部にrawが1つあります。 1.uiTableViewAutomaticDimensionは、テキストビューのコンテンツごとに行の高さを調整できるため、textviewを使用しました。2.ハイライトのテキスト選択を提供する必要があります。 – Nitesh

+0

まあ、 'UIWebView'や' WKWebView'のような 'UITextView'は本質的なコンテンツサイズを持たないので、自動次元でどのように役立つのかよくわかりません。また、テキストはWebビューでも選択可能ですが編集可能ではありません。 – beyowulf

答えて

0

問題はUITextViewは、HTMLコンテンツ内の属性パディングをサポートしていないということです。これを念頭に置いて、ここには2つのオプションがあります:

一方で、回答で示唆されているように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 
} 

NSAttributedStringにテキストを変換String拡張したものです。かなり大規模なリストにそれがパフォーマンスの問題につながる可能性があるため

また
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を解析してタイトルと段落を抽出し、2つの区切りで表示することができますUITextView。 `NSAttributedString`は本当に唯一の軽量の変換のために働くに

textView.textContainerInset = UIEdgeInsetsMake(0, 20, 0, 0) 
関連する問題