标签中属性文本的固有大小不正确
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
内容中删除<p>
标记可以修复大小。这让我认为这是sizeToFit
方法在必须处理从HTML
创建的属性字符串中的段落时无法正确计算大小。
我知道这不是最好的解决方案,但也许你可以用<br>
替换<p>
标签。这是迄今为止我设法找到的唯一解决方法。
【讨论】:
【参考方案3】:这是因为<p>
tags 固有地在末尾添加了新行。一种方法是使用<div style = display: inline>
这样它就不会添加新行
【讨论】:
以上是关于标签中属性文本的固有大小不正确的主要内容,如果未能解决你的问题,请参考以下文章