如何完美地计算UILabel所需的高度,其中属性字符串包含HTML标记

时间:2016-04-14 07:52:08

标签: objective-c swift autolayout

我正在解析来自Google Direction API的JSON响应,它正在使用html_instructions。我想在UILabel上显示它。但是没有得到任何完美的解决方案来计算UILabel所需的高度。

html_instructions如下:

Merge onto <b>Shankar Sheth Rd</b><div style=\"font-size:0.9em\">Pass by the gas station (on the left)</div>

我已经尝试过在stackoverflow上提到的解决方案,例如使用sizeThatFits()boundingRectWithSize(),它为html_instructions提供了正确的高度,但没有<div>标记,但是当html_instructions拥有时,它会留出额外的空间<div>代码。

请告诉我如何获取UILabel的确切所需高度,其中包含h <div>

等html标签的属性文字

3 个答案:

答案 0 :(得分:1)

我总是使用此UILabel扩展程序,它也适用于HTML标记。没有理由它不应该工作

extension UILabel {

    func sizeForString(string: NSString, constrainedToWidth width: Double) -> CGSize {

        return string.boundingRectWithSize(
            CGSize(
                width: width,
                height: DBL_MAX
            ),
            options: .UsesLineFragmentOrigin,
            attributes: [
                NSFontAttributeName : self.font
            ],
            context: nil).size
    }
}

答案 1 :(得分:0)

您可以使用UIWebView使用以下方法

加载html字符串
- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;

喜欢

[webView loadHTMLString:htmlString baseURL:nil];

加载htmlString后

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

将调用上面的委托方法。在这里,您可以获得webView的内容大小。你可以完美地设置UIWebView的高度

答案 2 :(得分:0)

Swift 3

let rowhtmlString = "Merge onto <b>Shankar Sheth Rd</b><div style=\"font-size:0.9em\">Pass by the gas station (on the left)</div>"

let htmlData = NSString(string: rowhtmlString ).data(using: String.Encoding.unicode.rawValue)

let attributedString = try! NSAttributedString(data: htmlData!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes:nil)

然后将attributedString分配给您的标签