はじめに
最近、多くの友人やグループの友人が、UITextView に HTML をロードする方法をよく尋ねます。 UILabel は HTML を読み込むことができますか?または、バックグラウンド インターフェイスに HTML 形式でデータを返すように依頼するにはどうすればよいですか?どうやって対処すればいいのでしょうか?
ここで、著者はこれらの友人やグループの友人からのフィードバックに基づいて小さなデモを作成してみました。これが皆さんのお役に立てれば幸いです。
このデモはセルにロードされ、行の高さを自動的に計算する方法を示します。ただし、作成者はより高度な処理を使用せず、sizeThatFits API を直接使用して高さを計算したため、UITextView の行の高さの計算でエラーが発生します。 UITextViewは本質的に上下左右の間隔が異なるため、計算に若干のズレが生じます。
この記事ではロード方法についてのみ説明しており、正確な計算方法については説明しません。
を使用して、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 は 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 は、テキスト スタイルを設定するための関連属性も提供します:
@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] のオリジナル製品です。転載する場合は出典を明記してください。