1. 程式人生 > >ios 三種方式載入本地HTMLString並計算高度

ios 三種方式載入本地HTMLString並計算高度


 
  

ios 原生控制元件載入本地HTMLString有三種方式:UILabel,UITextview,UIWebview;其中UILable,UITextview都是藉助於attributedText屬性載入富文字。

  一:UILable 載入本地HTMLString

      第一步:先把HTMLString 轉化為NSAttributedString:


- (NSAttributedString *)attributedStringWithHTMLString:(NSString *)htmlString

{

NSDictionary *options = @{ NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,

NSCharacterEncodingDocumentAttribute :@(NSUTF8StringEncoding) };

NSData *data = [htmlString dataUsingEncoding:NSUTF8StringEncoding];

return [[NSAttributedString alloc] initWithData:data options:options documentAttributes:nil error:nil];

}


   第二步:計算UIlable記載富文字之後的高度重置lable的frame;

  CGFloat height =  [self.lable.attributedText boundingRectWithSize:CGSizeMake(Device_Width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size.height;//針對富文字有專門的計算動態高度的方法,與nsstring 大同小異;

self.lable.height = height;

二:UItextview 與UIlable 載入方式一樣也是通過上述方法計算高度

三:UIWebView載入本地HTMLString

    以cell中巢狀UIWebView舉例,只舉例一個cell,如果多個cell,cell的高度還是要放在對應的model中儲存,否則會造成複用;

   當cell中巢狀UIWebview 時,需要在返回高度的地方返回cell.height ,可是webview的高度只有在載入HTMLString之後調動結束載入HTMLString之後才能獲得UIWebview的高度,從而cell 的高度才能獲得。

            首先,可以定義一個返回cell 高度的類變數,用靜態變數儲存,用來在webview載入完成之後重新儲存新的高度。

  

 那麼問題來了,   只能在賦值之後webView載入HTMLString,執行代理方法,執行完之後需要重新返回cell 的高度,需要通知UITableview進行重新整理,然後就會出現死迴圈,所以增加判斷 staticHeight == height +1判斷,‘1’是contenview與cell 的分割線的高度。

  最後總結下,如果是純HTMLString文字,可以使用UILable或者UItextview,(但是字型會小很多,相對於UIWebview載入來說,大神有知道的指點下),如果是帶有圖片的HTMLString,可以使用UIWebview進行載入; 

 demo地址:示例demo載入HTMLString 

作者:雪_晟 連結:http://www.jianshu.com/p/9d4e31449e44 來源:簡書 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。