有时候一些数据是需要动态显示,并且需要换行,但客户端并不知道这些数据该在哪里换行,
并按照后台编辑格式来显示,于是后台直接返回的后台编辑的h5字符串,但数据已经经过json
解析过了,再去通过专门解析h5的第三方去解析瞬间感觉头大,于是我去百度了一下如何显示
后台返回的h5字符串,有两个方法,一种是label的attributedText,还一种是webView。
label的写法:
NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:
[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:
@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
UILabel * myLabel = [[UILabel alloc] initWithFrame:self.view.bounds];
myLabel.attributedText = attrStr;
现在问题来,内容可以显示,但达不到我要的效果,首先不知道label要设置多高,也有代码:
计算attrStr的大小:
CGSize size = [attrStr boundingRectWithSize:CGSizeMake(label.frame.size.width, MAXFLOAT) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil].size;
如果计算不准就用 [myLabel sizeToFit] ;
如果内容超出界面咋办,放到scrollview里,好麻烦。于是我选择了webView,因为里面本身就可以滑,也不用自己计算高度。
问题又来了,是用WKWebView还是UIWebView,一开始我使用了WKWebView,我以为越新的api功能更全更好用,但我错了,显示出来
大小完全不同,和蚂蚁差不多,很失望,后面经过询问使用UIWebView才是正解,瞬间打脸。
#import <WebKit/WebKit.h>
@property(nonatomic,strong)UIWebView * htmlWebV;
- (UIWebView *)htmlWebV
{
if(_htmlWebV == nil)
{
_htmlWebV = [[UIWebView alloc] initWithFrame:CGRectMake(0, 100, 300, 200)];
_htmlWebV.scrollView.bounces = NO;
_htmlWebV.scrollView.showsHorizontalScrollIndicator = NO;
_htmlWebV.scrollView.backgroundColor = [UIColor whiteColor];
}
return _htmlWebV;
}
- (void)updateHtmlStr:(NSString *)htmlStr
{
if(htmlStr.length > 0)
{
[_htmlWebV loadHTMLString:htmlStr baseURL:nil];
}
}
[self.view addSubview:self.htmlWebV];
拿到数据之后,调用[self updateHtmlStr:htmlStr];