首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS:在html属性化字符串中调整图像大小

问iOS:在html属性化字符串中调整图像大小
EN

Stack Overflow用户
提问于 2016-04-18 05:22:41
回答 1查看 669关注 0票数 0

我有一个属性化字符串,它是从html代码解码的。

代码语言:javascript
复制
NSAttributedString *htmlstring =[[NSAttributedString alloc] initWithData:[formatString dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                                                                                                                              NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}documentAttributes:nil error:&error];

在字符串中,我有多个img标记,如

代码语言:javascript
复制
...
<p style="text-align: left;">
<img src="http://139.196.32.98/ueditor/php/upload/image/20160408/1460107835846711.jpg" alt="1460107835846711.jpg" width="75" height="103" style="width: 75px; height: 103px;"/>
<img src="http://139.196.32.98/ueditor/php/upload/image/20160408/1460106959338375.jpg" alt="1460106959338375.jpg" width="359" height="445" style="width: 359px; height: 445px;"/></p>
...

现在,我必须调整图像的大小,以修复移动屏幕。我试过

代码语言:javascript
复制
 NSString* substring = @"<img";
 NSRange range = [htmlstring rangeOfString:substring];

但是它只返回第一个搜索结果,以及如何将整个标记变成子字符串?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 08:16:52

为了继续搜索过去的第一个事件,您需要调整执行搜索的范围。在NSString上有一种方法允许您这样做:

代码语言:javascript
复制
- [NSString rangeOfString:options:range:];

因此,您需要在NSAttributedString下面使用它的纯文本表示形式,它可以通过其只读string属性访问。

因此,我们的想法是在每次找到匹配时计算一个新的搜索范围:

代码语言:javascript
复制
NSString *substring = @"<img";
NSString *plainString = [htmlstring string];
NSRange searchRange = NSMakeRange(0, [plainString length]);
NSRange openingTagRange = [plainString rangeOfString:substring options:0 range:searchRange];
while  ( openingTagRange.location < [plainString length] )
{
    NSLog(@"found opening tag at %lu", (unsigned long)openingTagRange.location);
    searchRange.location = NSMaxRange(openingTagRange);
    searchRange.length = [plainString length] - NSMaxRange(openingTagRange);
    openingTagRange = [plainString rangeOfString:openingTagString options:0 range:searchRange];
}

如果还想将整个标记变成子字符串,while循环将展开如下内容:

代码语言:javascript
复制
while  ( openingTagRange.location < [plainString length] )
{
    searchRange.location = NSMaxRange(openingTagRange);
    searchRange.length = [plainString length] - NSMaxRange(openingTagRange);
    NSRange closingTagRange = [plainString rangeOfString:@">" options:0 range:searchRange];

    if (closingTagRange.location > [plainString length])
    {
        break;
    }

    NSRange wholeTagRange = NSMakeRange(openingTagRange.location, NSMaxRange(closingTagRange) - openingTagRange.location);
    NSString *wholeTagString = [plainString substringWithRange:wholeTagRange];
    NSLog(@"wholeTagString == %@", wholeTagString);
    searchRange.location = NSMaxRange(wholeTagRange);
    searchRange.length = [plainString length] - NSMaxRange(wholeTagRange);
    openingTagRange = [plainString rangeOfString:substring options:0 range:searchRange];
}

注意,所遇到的第一个结束括号被假定为关闭标记,我猜,这可能并不总是这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36685983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档