在ios聊天界面开发中,由于本公司的软件有电脑版和手机app版,因此封装的聊天内容数据是html格式的,所以只能使用UITextView或者UILabel这两个类来做数据的处理,为了提高ios聊天页面的加载效率或者断网的时候能够正常显示图片信息,就需要做ios图片缓存。
这时候我就遇到了一个问题,当img标签中src是网络图片地址时,UITextView和UILabel都是可以正常显示图片的,如果将图片地址换成本地缓存地址的时候,图片就不能显示了,即使cache缓存路径正确也没有用,如这种情况。
<p><IMG width='120px' height='80px;' src='/Users/sinfor/Library/Developer/CoreSimulator/Devices/6CEB5028-153B-42B3-9E63-6428A62EF22C/data/Containers/Data/Application/A577EB6E-3DD3-401C-8E03-D09CDFA8BF7B/Library/Caches/images/timg.jpg'/>哈哈</p>
我各种debug都没有用,后来把src对应的图片地址复制到浏览器中,发现浏览器前面自动在src图片地址前面加入了“ file:// ”,于是我受到了启发,将上面的标签改成了这样,果然图片就正常加载出来了,如下。
<p><IMG width='120px' height='80px;' src='file:///Users/sinfor/Library/Developer/CoreSimulator/Devices/6CEB5028-153B-42B3-9E63-6428A62EF22C/data/Containers/Data/Application/A577EB6E-3DD3-401C-8E03-D09CDFA8BF7B/Library/Caches/images/timg.jpg'/>哈哈</p>
下面是UITextView和UILabel加载html的方法,也贴出来。
//UITextView和UILabel两个方法二选一就可以了 NSString *html = @"<p><IMG width='120px' height='80px;' src='file:///Users/sinfor/Desktop/timg.jpg'/>哈哈</p>"; //UITextView加载html方法 UITextView *text = [[UITextView alloc] initWithFrame:CGRectMake(50, 50, 130, 90)]; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; text.attributedText = attributedString; [self.view addSubview:text]; //UILabel加载html方法 UILabel * myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 80, 130, 90)]; NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; myLabel.attributedText = attrStr; [self.view addSubview:myLabel];