2016-07-15 6 views
1

私のバックエンドから来るHTML文字列をtextViewNSAttributedStringに変換しようとしていますが、自分でフォントを設定したいのですが、です。ここでSwift:カスタムフォントでHTMLから文字列を作成

私のサーバーからHTML-文字列の例です:いくつかのstackoverflowのトピックは、サーバ・バックエンドでのフォントを設定示唆

<p><strong>Title</strong></p> <p><strong>Extra info ..</strong></p><p>- Some more info</p> <p>- Contact</p> 

、しかし、これは私の状況では不可能です。

私はNSAtrributedStringを作成する方法についてのオンライン検索:WebViewまたはNSAttributedStringを使用し、私は特定の理由のための第二と一緒に行きました。私はNSAttributedStringに私のHTML-文字列を変換するには、次のメソッドを使用します。

func setHTMLFromString() -> NSAttributedString{ 
    let attrStr = try! NSMutableAttributedString(
     data: self.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!, 
     options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
     documentAttributes: nil)  
    return attrStr 
} 

このメソッドは動作しますが、しかしそれは私が私のTextViewに設定されているデフォルトのシステムフォントを上書きします。だから私は、属性として、フォントを追加してみました:

func setHTMLFromString() -> NSAttributedString{ 
    let attrStr = try! NSMutableAttributedString(
     data: self.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!, 
     options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
     documentAttributes: nil) 

    if #available(iOS 8.2, *) { 
     attrStr.addAttributes([NSFontAttributeName : UIFont.systemFontOfSize(16.0, weight: UIFontWeightThin), 
      NSForegroundColorAttributeName: UIColor(rgb: 0x555555)], range: NSMakeRange(0, attrStr.length)) 
    } else { 
     attrStr.addAttributes([NSFontAttributeName : UIFont.systemFontOfSize(16.0), 
      NSForegroundColorAttributeName: UIColor(rgb: 0x555555)], range: NSMakeRange(0, attrStr.length)) 
    } 

    return attrStr 
} 

今、私が表示したいフォントが正しく、しかし、すべてのHTMLタグが動作を停止示しています。誰でもフォントを設定し、HTMLタグを機能させる方法についての解決策はありますか?

答えて

3

HTMLをサーバーから受信した後、属性付き文字列に渡す前に、CSSフォントスタイルをHTMLに埋め込むことができます。フォントの詳細は、CSSスタイルの文字列補間を使用して動的に設定できます。テキストビューのフォントをつかんで設定することができます。私は前にこのようなことをやったことがあり、それはうまくいったが、私は本当にそれを愛していない。

+1

取得したHTMLにCSSを埋め込むことは可能ですが、これは「汚い」と感じます。私は本当にAndroidのようなより良い/簡単な方法がない場合は、すべての作業を行うネイティブのHTMLクラスがあるのだろうかと思う。私はこのトピックを少し待つつもりで、他の答えが与えられなければ、それはトリックをするので、私はこの答えを受け入れるでしょう。 – Hapeki

+0

@Hapeki「汚い」と感じることは完全に同意します。あなたがより良い方法を思いつくなら、私は興味があります。 –

1

「作業していない」とは、「強い」テキストが残りのテキストと同じフォントで出力されていることを意味します。これは、文字列全体にフォント属性を適用したもともとHTMLで設定されていたフォント属性をオーバーライドしてしまいます。 NSAttributedStringの属性は、HTMLと同じ方法で入れ子になっているとは思いません。

最初に、属性付き文字列がtextViewのデフォルトフォントセットをオーバーライドする理由がわかりません。たとえば、ボタンのタイトルとしてAttributedStringを設定した場合、私はそれを見ていません。 HTMLから帰属する文字列への変換では、デフォルトのフォント属性が導入されているはずです。

これを修正するにはどうすればよいかわかりません。HTMLのプレコンバージョンにフォントスタイルを挿入するのはどうですか?それ以外の場合は、文字列内の属性をループし、フォント属性を置換/変更することができますが、それは面倒です。

+0

フォントスタイルを追加することで、HTML文字列にフォントが含まれるように文字列を補間することを意味すると思いますか? 例: http://stackoverflow.com/a/24653632/6414904 – Hapeki

+0

そうですね –

関連する問題