标签中属性文本的内在大小不正确

时间:2016-05-26 11:14:05

标签: html ios autolayout uilabel nsattributedstring

我在标签中的属性文本有问题,底部占用了大量空间。当我使用不归因于一个时,尺寸确定没问题,但现在我总是底部空间 - 图像上标记为粉红色。我尝试在Reveal.app中更改高度约束的值(由iOS生成),当我使它比它小一点时,文本被截断。

我需要属性标签,因为我从HTML字符串中创建属性:

<p style=\"font-family: EncodeSans-Thin; font-size: 10.0; color: #1f2e3b;\">
    Od 2004 roku wspieramy organizacje biznesowe w rozwoju sztuki zarządzania projektami. 
    Nasza działalność opiera się na trzech filarach – 
    <span style=\"font-family: EncodeSans-Light\">
        doradztwie, realizacji projektów na zlecenie oraz szkoleniach.
    </span>
</p>

bottom space ilustration

你遇到过这样的问题吗?

更新

我使用下面的函数从HTML字符串生成NSAttributedString(作为String扩展名)。

func makeAttributesFromHTML() -> NSAttributedString {
    guard let htmlData = self.dataUsingEncoding(NSUTF8StringEncoding) else {
        return NSAttributedString()
    }

    do {
        let atributedString = try NSAttributedString(data: htmlData, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding], documentAttributes: nil)

        return atributedString
    } catch {
        return NSAttributedString()
    }
}

3 个答案:

答案 0 :(得分:1)

我以前肯定有这个。我发现一旦你在标签上设置了文本,你就必须使用

更新它
label.attributedText = foo;
[label setNeedsLayout]; // this line normally isn't required
[label layoutIfNeeded];

这应该将标签大小调整到正确的大小。如果做不到这一点,我不完全确定你的自动布局约束是如何设置的,但你可以手动计算标签的新高度并根据它设置高度约束。但这通常不是必需的。

最后,您可能在文本末尾有空格。如果您不想要,请务必将其删除。

答案 1 :(得分:1)

我发现从<p>内容中删除HTML代码会修复尺寸。这让我觉得sizeToFit方法在必须处理从HTML创建的属性字符串中的段落时,无法正确计算大小。

我知道这不是最好的解决方案,但也许您可以用<p>替换<br>代码。这是我到目前为止找到的唯一解决办法。

答案 2 :(得分:0)

这是因为<p>标签最终会在最后添加新行。一种方法是使用<div style = display: inline>这种方式不会添加新行