iOS - UIWebView html 图片自适应屏幕

import "NewsDetailV.h"

@interface NewsDetailV()
<
UIWebViewDelegate
>


/** 整个crrollV*/
@property (nonatomic,strong) UIScrollView *scroolV;
/**  名称label*/
@property (nonatomic,strong) UILabel *nameLabel;
/** 来源于*/
@property (nonatomic,strong) UILabel *originateLabel;
/** 时间*/
@property (nonatomic,strong) UILabel *timeLabel;
/** WebV*/
@property (nonatomic,strong) UIWebView *webView;
/** webv 的 H*/
@property (nonatomic,assign) CGFloat webH;
/** 加载视图*/
@property (nonatomic,strong) UIActivityIndicatorView *indicator;
/** 线*/
@property (nonatomic,strong) UIView *lineV;


@end
@implementation NewsDetailV

-(instancetype)initWithFrame:(CGRect)frame{
    
    if (self = [super initWithFrame:frame]) {
        [self initUserinterface];
    }
    return self;
}
#pragma mark -- UIWebViewDelegate


-- (void)webViewDidFinishLoad:(UIWebView *)webView
{

    NSString *height_str= [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"];
    int height = [height_str floatValue];
    height += 10;
    self.webH = height;
    [self.indicator stopAnimating];
    [self layoutSubviews];

}
-- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{

    [self.indicator stopAnimating];
    [MBProgressHUD showSuccess:@"详情加载失败..." toView:nil];
    self.webView.hidden = YES;
    CGFloat wholeH = (JobDetailVTitleVH + HeightOfLabel(TextFont(14, six))  + HeightScreen(20, six));
    [[NSNotificationCenter defaultCenter]postNotificationName:JobDesriptionChangeHNoti object:@{@"h":@(wholeH)}];
    return;

}


#pragma mark -- 界面
-(void)initUserinterface{

    // 整个crrollV
    UIScrollView *scroolV = [[UIScrollView alloc]init];
    scroolV.backgroundColor = WhiteColor;
    [self addSubview:scroolV];
    self.scroolV = scroolV;
    
    // 名称label
    UILabel *nameLabel = MakeLabelWith(ImTextColor, Px36FontSize);
    nameLabel.numberOfLines = 0;
    [scroolV addSubview:nameLabel];
    self.nameLabel = nameLabel;

    // 来源于
    UILabel *originateLabel = MakeLabelWith(TextColor, Px24FontSize);
    originateLabel.numberOfLines = 0;
    [scroolV addSubview:originateLabel];
    self.originateLabel = originateLabel;
    
    // 时间
    UILabel *timeLabel = MakeLabelWith(LiTextColor, Px24FontSize);
    [scroolV addSubview:timeLabel];
    self.timeLabel = timeLabel;
    
    // 线
    UIView *lineV = MakeLineView(self.scroolV, LineColor);
    self.lineV = lineV;
    
    // WebV
    UIWebView *webView = [[UIWebView alloc]init];
    webView.backgroundColor = [UIColor clearColor];
    webView.scrollView.bounces = NO;
    webView.delegate = self;
    webView.scrollView.showsHorizontalScrollIndicator = NO;
    webView.scrollView.showsVerticalScrollIndicator = NO;
    webView.scrollView.scrollEnabled = NO;
    webView.dataDetectorTypes = UIDataDetectorTypeNone;
    webView.opaque = NO;
    webView.backgroundColor = [UIColor clearColor];
    [self.scroolV addSubview:webView];
    self.webView = webView;
    


}
#pragma mark -- 布局
-(void)layoutSubviews{

    [super layoutSubviews];
    // 整个crrollV
    self.scroolV.frame = CGRM(0, HomeMargin, S_W, self.height - HomeMargin);
    // 名称label
    [self.nameLabel sizeToFit];
    CGFloat nameLabelY = ( HeightMacroScreen(30));
    self.nameLabel.frame = CGRM(MainLeftMargin,nameLabelY, S_W - MainLeftMargin * 2, self.nameLabel.height);
    // 来源于
    CGFloat originateLabelY = (nameLabelY + self.nameLabel.height + HeightMacroScreen(42));
    // 时间
    [self.timeLabel sizeToFit];
    self.timeLabel.frame = CGRM(S_W - MainLeftMargin - self.timeLabel.width, originateLabelY, self.timeLabel.width, self.timeLabel.height);
    // 来源于
    [self.originateLabel sizeToFit];
    self.originateLabel.frame = CGRM(MainLeftMargin, originateLabelY, self.timeLabel.x - WidMacroScreen(10) - MainLeftMargin, self.originateLabel.height);
    // 线
    CGFloat lineVY;
    if (self.originateLabel.text != nil && self.originateLabel.text.length > 0) {
        lineVY = CGRectGetMaxY(self.originateLabel.frame) + HeightMacroScreen(30);
    }else{
        lineVY = CGRectGetMaxY(self.timeLabel.frame) + HeightMacroScreen(30);
    }
    self.lineV.frame = CGRM(MainLeftMargin, lineVY, S_W - MainLeftMargin * 2, HeightPtMacroScreen(1));
    
    // 职位描述WebV
    CGFloat webViewY =  CGRectGetMaxY(self.lineV.frame) + HeightMacroScreen(50);
    self.webView.frame = CGRM(MainLeftMargin / 2,webViewY, S_W - MainLeftMargin ,self.webH);

    self.scroolV.contentSize = CGSizeMake(S_W, CGRectGetMaxY(self.webView.frame));
}


#pragma mark -- setter
// 数据字典
-(void)setDic:(NSDictionary *)dic{

    _dic  = dic;
    NSDictionary *news = [dic getDictionaryForKey:@"news" defaultValue:nil];
    self.nameLabel.text = [news getStringValueForKey:@"title" defaultValue:nil];
    NSString *publisher = [news getStringValueForKey:@"publisher" defaultValue:nil];
    if (publisher != nil && publisher.length > 0) {
        self.originateLabel.text = [NSString stringWithFormat:@"【%@】",publisher];
    }
    NSString *create_time = [news getStringValueForKey:@"create_time" defaultValue:nil];
    if (create_time != nil && create_time.length >= 10) {
        self.timeLabel.text = [NSString stringWithFormat:@"%@.%@.%@",[create_time substringToIndex:4],[create_time substringWithRange:NSMakeRange(5, 2)],[create_time substringWithRange:NSMakeRange(8, 2)]];
    }

    NSString *content = [news getStringValueForKey:@"content" defaultValue:nil];
    NSString * WEB_STYLE ;
    /** 全局web样式 */
    if (IPHONE_5_S || IPHONE_4_S) {
        WEB_STYLE = @"<style>* {} img {max-width:250px;}img.alignleft {float:left;max-width:100px;margin:0 10px 5px 0;border:1px solid #ccc;background:#fff;padding:2px;}pre {font-size:9pt;line-height:12pt;font-family:Courier New,Arial;border:1px solid #ddd;border-left:5px solid #6CE26C;background:#f6f6f6;padding:5px;}a.tag {font-size:15px;text-decoration:none;background-color:#bbd6f3;border-bottom:2px solid #3E6D8E;border-right:2px solid #7F9FB6;color:#284a7b;margin:2px 2px 2px 0;padding:2px 4px;white-space:nowrap;}</style>";
    }else if (IPHONE_6_S){
        WEB_STYLE = @"<style>*{} img {max-width:310px;}img.alignleft {float:left;max-width:120px;margin:0 10px 5px 0;border:1px solid #ccc;background:#fff;padding:2px;}pre {font-size:9pt;line-height:12pt;font-family:Courier New,Arial;border:1px solid #ddd;border-left:5px solid #6CE26C;background:#f6f6f6;padding:5px;}a.tag {font-size:15px;text-decoration:none;background-color:#bbd6f3;border-bottom:2px solid #3E6D8E;border-right:2px solid #7F9FB6;color:#284a7b;margin:2px 2px 2px 0;padding:2px 4px;white-space:nowrap;}</style>";
    }else{
        WEB_STYLE = @"<style>*{} img {max-width:310px;}img.alignleft {float:left;max-width:120px;margin:0 10px 5px 0;border:1px solid #ccc;background:#fff;padding:2px;}pre {font-size:9pt;line-height:12pt;font-family:Courier New,Arial;border:1px solid #ddd;border-left:5px solid #6CE26C;background:#f6f6f6;padding:5px;}a.tag {font-size:15px;text-decoration:none;background-color:#bbd6f3;border-bottom:2px solid #3E6D8E;border-right:2px solid #7F9FB6;color:#284a7b;margin:2px 2px 2px 0;padding:2px 4px;white-space:nowrap;}</style>";
    }
    
    NSString * resultHtml = [NSString stringWithFormat:@"%@%@",WEB_STYLE ,content];
    // 过滤掉 img标签的width,height属性
    NSString *replaceWidth = @"(<img[^>]*?)\\s+width\\s*=\\s*\\S+";
    NSString *replaceHeight = @"(<img[^>]*?)\\s+height\\s*=\\s*\\S+";
    
    NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:
                                              
                                              replaceWidth options:0 error:nil];
    NSRegularExpression *regularExpression2 = [NSRegularExpression regularExpressionWithPattern:
                                               
                                               replaceHeight options:0 error:nil];
    resultHtml  = [regularExpression stringByReplacingMatchesInString:resultHtml options:0 range:NSMakeRange(0, resultHtml.length) withTemplate:@"$1"];
    resultHtml  = [regularExpression2 stringByReplacingMatchesInString:resultHtml options:0 range:NSMakeRange(0, resultHtml.length) withTemplate:@"$1"];
    [self.webView loadHTMLString:resultHtml baseURL:nil];


    
    [self layoutSubviews];
}


#pragma mark -- getter

-(UIActivityIndicatorView *)indicator{

    if (!_indicator) {
        _indicator =  [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        //3.1 位置
        _indicator.center = CGPointMake(S_W / 2, S_H / 2);
        //3.2 关闭隐藏
        _indicator.hidesWhenStopped = YES;
        [_indicator startAnimating ];
    }
    return _indicator;

}


@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容