溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

UITextView和UILabel加載HTML的示例分析

發(fā)布時間:2021-04-14 11:46:10 來源:億速云 閱讀:389 作者:小新 欄目:web開發(fā)

小編給大家分享一下UITextView和UILabel加載HTML的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Demo效果截圖

這demo中是放在cell里面加載的,并且教大家如何自動計算行高。不過UITextView計算行高是有誤差的,因為筆者沒有使用更高級的處理,直接使用了sizeThatFits這個API來計算高度。而UITextView天生就不一樣,它有上、下、左、右的間隔的,因此計算出來是有一點小偏差的。

本篇文章只講如何加載,不講如何精確計算!

使用到NSAttributedString

通過它就可以設(shè)置加載HTML。但是,要讓UILabel可以加載HTML,要求在iOS7之后才可以使用:

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

其中,options中的指定key為:

 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就是設(shè)置要加載HTML了。

UILabel加載HTML

UILabel在iOS6.0后提供了一個屬性用于設(shè)置各種呈現(xiàn)的樣式:

 @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也提供了相關(guān)設(shè)置文本樣式的屬性:

 @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后,還要設(shè)置行高約束,否則高度就是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后,也要設(shè)置其高度,但是要注意,sizeThatFits:這個API計算UITextView的高度是不精準(zhǔn)的,有一定的誤差。

最后

順便說一下,屬性中指定的類型null_resettable是什么鬼?這是新特性啦,從英文角度看就大概可以看出來意思是 可空、可重新設(shè)置值 。

以上是“UITextView和UILabel加載HTML的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI