ホームページ  >  記事  >  ウェブフロントエンド  >  UITextView と UILabel は HTML_html/css_WEB-ITnose を読み込みます

UITextView と UILabel は HTML_html/css_WEB-ITnose を読み込みます

不言
不言オリジナル
2018-05-25 13:38:062067ブラウズ

はじめに

最近、多くの友人やグループの友人が、UITextView に HTML をロードする方法をよく尋ねます。 UILabel は HTML を読み込むことができますか?または、バックグラウンド インターフェイスに HTML 形式でデータを返すように依頼するにはどうすればよいですか?どうやって対処すればいいのでしょうか?

ここで、著者はこれらの友人やグループの友人からのフィードバックに基づいて小さなデモを作成してみました。これが皆さんのお役に立てれば幸いです。

デモ効果のスクリーンショット

このデモはセルにロードされ、行の高さを自動的に計算する方法を示します。ただし、作成者はより高度な処理を使用せず、sizeThatFits API を直接使用して高さを計算したため、UITextView の行の高さの計算でエラーが発生します。 UITextViewは本質的に上下左右の間隔が異なるため、計算に若干のズレが生じます。

この記事ではロード方法についてのみ説明しており、正確な計算方法については説明しません。

NSAttributedString

を使用して、HTML を設定およびロードできます。ただし、UILabel が HTML をロードできるようにするには、iOS7 以降で使用する必要があります:

 - (nullableinstancetype)initWithData:(NSData *)dataoptions:(NSDictionary*)optionsdocumentAttributes:(NSDictionary* __nullable* __nullable)dicterror:(NSError **)errorNS_AVAILABLE(10_0, 7_0);

その中で、オプションで指定されたキーが

 UIKIT_EXTERN NSString * const NSDocumentTypeDocumentAttribute NS_AVAILABLE(10_0, 7_0);

の場合、それは可能です値は次のとおりです:

 UIKIT_EXTERN NSString * const NSPlainTextDocumentType NS_AVAILABLE(10_0, 7_0);UIKIT_EXTERN NSString * const NSRTFTextDocumentType NS_AVAILABLE(10_0, 7_0);UIKIT_EXTERN NSString * const NSRTFDTextDocumentType NS_AVAILABLE(10_0, 7_0);UIKIT_EXTERN NSString * const NSHTMLTextDocumentType NS_AVAILABLE(10_0, 7_0);

このうち、NSHTMLTextDocumentType は HTML を読み込むように設定されます。

UILabel は HTML を読み込みます

UILabel は iOS6.0 以降、さまざまな描画スタイルを設定するための属性を提供します:

 @property(null_resettable,copy) NSAttributedString *attributedText NS_AVAILABLE_IOS(6_0);

attributedText 属性は iOS6 ですが、これで十分です。ただし、HTML をロードするには、iOS7 以降で使用する必要があります:

 // ios 7.0以后才能使用NSData *data = [model.htmldataUsingEncoding:NSUnicodeStringEncoding];NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};NSAttributedString *html = [[NSAttributedString alloc]initWithData:data                                                            
 options:options                                                 
 documentAttributes:nil                                                              error:nil];self.htmlLabel.attributedText = html;

UITextView は HTML をロードします

UITextView は、テキスト スタイルを設定するための関連属性も提供します:

 @property(null_resettable,copy) NSAttributedString *attributedText NS_AVAILABLE_IOS(6_0);

UILabel と同様に、attributedText 属性は iOS6 でも使用できますが、HTML をロードするには、iOS7 以降で使用する必要があります。

 // ios 7.0以后才能使用NSData *data = [model.htmldataUsingEncoding:NSUnicodeStringEncoding];NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};NSAttributedString *html = [[NSAttributedString alloc]initWithData:data                                                            
 options:options                                                 
 documentAttributes:nil                                                              
 error:nil];self.textView.attributedText = html; // 加载HTML后,还要设置行高约束,否则高度就是0CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;[self.textViewmas_updateConstraints:^(MASConstraintMaker *make) {  make.height.mas_equalTo([self.textViewsizeThatFits:CGSizeMake(screenWidth - 20, CGFLOAT_MAX)].height);}];

HTML をロードした後、次の設定も行う必要があります。ただし、sizeThatFits: この API は UITextView の高さの計算が正確ではなく、特定のエラーがあることに注意してください。

最後に

ところで、属性に指定するnull_resettableの型とは何でしょうか?これは新しい機能であり、英語の観点からは、null 可能で再構成可能な値 を意味すると言えます。

ソース コード

この記事に関連する小さなデモは参考としてのみダウンロードできます。

ダウンロード アドレス: CoderJackyHuang 著者の GITHUB アドレスと Biao Ge のテクノロジー ブログのフォローを歓迎します。

フォローしてください

关注 账号 备注
Swift/ObjC技术群一 324400294 群一若已满,请申请群二
Swift/ObjC技术群二 494669518 群二若已满,请申请群三
Swift/ObjC技术群三 461252383 群三若已满,会有提示信息
关注微信公众号 iOSDevShares 关注微信公众号,会定期地推送好文章
关注新浪微博账号 标哥Jacky 关注微博,每次发布文章都会分享到新浪微博
关注标哥的GitHub CoderJackyHuang 这里有很多的Demo和开源组件
关于我 进一步了解标哥 如果觉得文章对您很有帮助,可捐助我!

著作権表示: この記事は [Brother Biao's Technology Blog] のオリジナル製品です。転載する場合は出典を明記してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。