【发布时间】:2014-05-04 11:35:17
【问题描述】:
我的文本包含我试图在视图上呈现的 HTML 格式。目前我正在使用NSAtributedString 在UILabel 中显示文本。
我获取属性字符串如下:
NSString *htmlString = @"<html>"
" <head>"
" <style type='text/css'>"
" body { font: 12pt 'Helvetica'; color: #111111; }"
" </style>"
" </head>"
" <body>";
htmlString = [htmlString stringByAppendingString:self.descriptionText];
htmlString = [htmlString stringByAppendingString:@"</body></html>"];
NSError *err = nil;
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithData: [htmlString dataUsingEncoding:NSUTF8StringEncoding]
options: @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}
documentAttributes: nil
error: &err];
然后将其分配给我标签的attributedText 属性。属性 self.descriptionText 是一个 NSString,它可以包含简单的 HTML 标记,例如 p 标签或带有内联样式的 span 标签。在另一个 StackOverflow 帖子中发现了将字符串包装在 HTML 文档中的技术。
UILabel 设置为 Lines = 0 和 Line Breaks = Word Wrap。我看到的行为是标签正确增长以适应整个字符串,但字符串的最后一行永远不会呈现,无论字符串有多长。
这是一个带有两个标签的屏幕截图。顶部标签(带有黄色背景)中包含我的 HTML 属性字符串。您可以看到标签本身已调整大小以允许 3 行文本,但只呈现了两行,其余的被截断。第二个标签(带有红色背景)已为其 Text 属性分配了一个纯字符串,并且绘制得很好。
示例图像中使用的 HTML 字符串包含以下文本:
<p>With the world's longest fan-vaulted ceiling, an original Reubens painting, and an excellent collection of medieval stained glass, this chapel has intrigue from multiple angles</p>
一个可接受的答案将解释我如何防止最后一行被截断或提供一种简单的替代方法来将 HTML 文本呈现到视图。谢谢。
【问题讨论】:
-
字符串
htmlString只是纯文本还是 html 标记?如果是这样,请告诉我们字符串。 -
htmlString 确实包含简单的 HTML 标记。为了清楚起见,我添加了更多代码。
-
我认为问题在于标签高度。尝试将标签矿石的高度设置为比当前高度。
-
@PoojaM.Bohora 我正在使用自动布局,我不希望参与在我的视图中手动布局元素的业务。考虑到标签在运行时大于其在 IB 中的大小这一事实,自动布局似乎正在尝试工作。我确实尝试在代码中增加标签高度的大小,但它没有明显的效果。我认为自动布局正在撤消我的更改。
标签: html ios objective-c uilabel nsattributedstring