美文网首页
UILabel加载html

UILabel加载html

作者: njim3 | 来源:发表于2018-03-17 15:09 被阅读208次

    前言

           iOS中加载html可以使用WebView,但是webview使用比较麻烦,需要设置字体大小,以及根据observer的变化判断是否已经加载完成,如果html文本较多,则需要1-2s的加载时间,这于用户是不能忍受的。使用UILabel就方便许多,计算出FitSize,设置一下即可。

    在任何一处编写相同的适配代码,这是很low的做法。因此笔者将它封装成一个分类。

    实现方法

    NSString+htmlString.m

    /**
     获取html字符串fitSize
    
     @param currentSize 传入当前label大小
     @param font 传入当前label的font
     @param attrStr 传出参数
     @return 返回fitSize
     */
    - (CGSize)getHtmlFitSizeWithCurrentSize: (CGSize)currentSize
                                       font: (UIFont*)font
                        outAttributedString: (NSMutableAttributedString**)attrStr
    {
        NSData* htmlStrData = [self dataUsingEncoding: NSUnicodeStringEncoding];
        NSDictionary* options = @{ NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType };
    
        (*attrStr) = [[NSMutableAttributedString alloc] initWithData: htmlStrData
                                                             options: options
                                                  documentAttributes: nil
                                                               error: nil];
    
        [(*attrStr) addAttribute: NSFontAttributeName
                                  value: font
                                  range: NSMakeRange(0, (*attrStr).length)];
    
        CGRect fitRect = [(*attrStr) boundingRectWithSize: currentSize
                                                  options:
                          NSStringDrawingUsesLineFragmentOrigin |
                          NSStringDrawingUsesFontLeading
                                                  context: nil];
    
        fitRect.size.height += 1;   // 如果UILabel的高度固定,加1可以使图片显示出来
    
        return fitRect.size;
    }
    

    使用说明

    在controller中调用方法,设置显示

    - (void)loadHtmlOnView: (NSString*)htmlStr {
        NSMutableAttributedString* attrMutStr;
        CGSize fitSize = [htmlStr getHtmlFitSizeWithCurrentSize: self.htmlLbl.frame.size
                                                           font: self.htmlLbl.font
                                            outAttributedString: &attrMutStr];
    
        CGRect finalFrame;
    
        finalFrame.origin = self.htmlLbl.frame.origin;
        finalFrame.size = fitSize;
    
        self.htmlLbl.frame = finalFrame;
        self.htmlLbl.attributedText = attrMutStr;
    }
    

    相关文章

      网友评论

          本文标题:UILabel加载html

          本文链接:https://www.haomeiwen.com/subject/wsdjqftx.html