标签中属性文本的固有大小不正确

Posted

技术标签:

【中文标题】标签中属性文本的固有大小不正确【英文标题】:Incorrect intrinsic size of attributed text in label 【发布时间】:2016-05-26 11:14:05 【问题描述】:

我对标签中的属性文本有问题,该文本在底部占用了大量空间。当我使用未归因的时,大小还可以,但现在我总是底部空间 - 在图像上标记为粉红色。我尝试在 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>

你遇到过这样的问题吗?

更新:

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

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()
    

【问题讨论】:

【参考方案1】:

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

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

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

最后,您的文本末尾可能有尾随空格。如果您不想要它,请确保将其删除。

【讨论】:

这是我的第一个猜测。但没有任何效果。我一直在尝试: label.setNeedsUpdateConstraints() label.updateConstraintsIfNeeded() label.setNeedsLayout() label.layoutIfNeeded() self.view.setNeedsLayout() self.view.layoutIfNeeded() 你肯定没有尾随空格? 我没有空格。并且高度约束是由自动布局产生的,我没有手动设置。呈现的整个代码是我发布的 html。我的猜测是,从 html 字符串生成属性文本的函数可能做得很糟糕。问题随之更新。 这就是我所说的约束。在代码中设置文本后,您可以询问标签的新大小并将其设置为您作为出口的约束。 我现在遇到了类似的问题...我最担心 ATM 是 AutoLayout 在将 nsattributedstring 与 uilabels 一起使用时会出现问题,如果您更改行高等...我必须以某种方式解决这个问题。有人吗?【参考方案2】:

我发现从HTML 内容中删除&lt;p&gt; 标记可以修复大小。这让我认为这是sizeToFit 方法在必须处理从HTML 创建的属性字符串中的段落时无法正确计算大小。

我知道这不是最好的解决方案,但也许你可以用&lt;br&gt; 替换&lt;p&gt; 标签。这是迄今为止我设法找到的唯一解决方法。

【讨论】:

【参考方案3】:

这是因为&lt;p&gt;tags 固有地在末尾添加了新行。一种方法是使用&lt;div style = display: inline&gt; 这样它就不会添加新行

【讨论】:

以上是关于标签中属性文本的固有大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

从文本创建图像(大小不正确)

GWT - 标签没有正确包装文本?

带有属性文本字体的 ios 标签无法正确显示

为自动布局设置数字 UILabel 以正确计算内在内容大小

自动布局:UILabel 无法正确调整长文本的大小

UITableViewCell 中的 UILabel 大小不正确(分配文本后的动画)