如何在UILabel的段落周围绘制边框?

时间:2014-01-08 19:18:23

标签: ios uilabel nsattributedstring

我正在尝试使用可以显示丰富内容的UILabel。为此,我使用attributedText中的UILabel属性和NSAttributedString我使用NSHTMLTextDocumentType分配。

我想要实现的一种格式是在段落周围绘制边框(用于引号)。正常的文本格式,如字体,粗体,斜体等似乎工作正常,但当我使用像边框这样的CSS属性时,它不能像我期望的那样工作。见图;只显示background-color属性。

UILabel with HTML

此UILabel的attributedText属性为:

<style>
  body{font:10pt Verdana;} .quote {background-color:#ddd;border:1px solid #aaa;}
</style>
<body>
  <div class="quote">This is a quote</div>
  <br/>
  Bla bla bla
</body>

我期望的是UILabel内第一个句子/段落的边界 - 而不是整个UILabel周围的边界。

文本背景显示,但预期的边框不显示。甚至有可能实现这一目标吗?我更愿意使用UILabel来保持UITableView快速。

6 个答案:

答案 0 :(得分:4)

您使用的是-[NSAttributedString initWithData:options:documentAttributes:error:]吗?

您的问题可能来自此限制:

  

HTML导入机制用于实现降价(   也就是说,文本样式,颜色等),而不是一般的HTML导入。

https://developer.apple.com/library/ios/documentation/uikit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html#//apple_ref/occ/instm/NSAttributedString/initWithData:options:documentAttributes:error

答案 1 :(得分:3)

我不知道这是在SDK中实现的,即使你可以限制到iOS 7.但至少有两个一般选项。

UILabel的子类中,您可以使用NSAttributedString的大小调整方法,例如boundingRectWithSize:options:context:size来计算子文本的显示位置,以及覆盖drawTextInRect:覆盖边框。您可以通过计算前一文本的框架和附加的子文本,然后取其差异来推断出所需的边框。

另一种选择是在NSAttributedStrings上设置自定义属性,这是Apple公开鼓励的,Apple's overview

  

您可以将所需的任何属性名称/值对分配给范围   字符 - 由您的应用程序来解释自定义属性   (参见属性字符串编程指南)。

然后在NSAttributedStrings的子类中,覆盖绘图方法,例如drawInRect:,并根据自定义属性的第一个建议实现类似的自定义绘图逻辑,否则依赖于super。

答案 2 :(得分:1)

据我所知,iOS归因字符串不支持大纲。你有没有在iOS或Mac OS上看到这个问题?

答案 3 :(得分:0)

当我将代码粘贴到调试器上时,它会显示边框。您是否尝试过将颜色更改为更亮的颜色?或者,也许您在其他地方有其他CSS覆盖主CSS中的border属性。如果是这样,请尝试使用!important 标记在html标记内测试或内联CSS,而不是嵌入。

答案 4 :(得分:-1)

尝试在:和声明之间添加空格。有些口译员更喜欢这个。

body {
  font: 10pt Verdana;
} 

.quote {
  background-color: #ddd;
  border: 1px solid #aaa;
}

答案 5 :(得分:-1)

你也可以尝试将div添加到类中并添加如下字体属性:

body {
  font-family: Verdana;
} 

div.quote {
  background-color: #ddd;
  border: 1px solid #aaa;
  font-size: 10pt;
}