iPhone 上的 CoreText 和删除线

Posted

技术标签:

【中文标题】iPhone 上的 CoreText 和删除线【英文标题】:CoreText and strikethrough on iPhone 【发布时间】:2011-09-28 14:04:45 【问题描述】:

我目前正在努力解决在许多UITableViewCells 中显示删除线文本的需求。用 html 编写的东西看起来像

99 欧元 节省 50% => 现在 49 欧元

我不想将UIWebView 仅用于单行文本,尤其是在较小的UITableViewCells 中使用它。我知道有可重复使用的单元格,但我希望尽可能以更节省内存的方式保存。

所以...我正在使用 NSAttributedStrings,在 AliSoftware 的 UILabel-replacement OHAttributedLabel 的帮助下。它仅从 ios 4.0 开始可用这一事实没有问题,因为我们使用各种仅与 4.0 兼容的东西。

我可以设法创建属性字符串,它在OHAttributedLabel 中显示文本,好的,这很酷。但我无法实现的是设置“删除线”或“删除线”属性。

基本上我是这样的:

NSString *price = [NSString stringWithFormat:@"%01.2f €", product.price];
NSString *rate = [NSString stringWithFormat:@" -%01.0f%%", product.reductionRate];

NSMutableAttributedString *s = [NSMutableAttributedString attributesStringWithString:price];

[s addAttribute:NSStrikethroughStyleAttributeName 值:[NSNumber numberWithInteger:NSUnderlinePatternSolid | NSUnderlineStyleSingle] 范围:NSRangeFromString(price)];
[attributedLabel setAttributedText:s];

但是在这里,三个NS* 常量是未定义的。我已经导入了CoreText.hFoundation/NSAttributedString.h,但无济于事。我在网上的某个地方看到过 NSStrikethroughStyleAttributeName = @"NSStrikethroughStyleAttributeName",以及 NSUnderlinePatternSolid = 0NSUnderlineStyleSingle = 1,但是硬编码这些值并没有给出任何结果。 我通过自动完成获得的一件事是等效的 kCT...* 常量,但有 kCTUnderlineStyleAttributeNamekCTStrokeWidthAttributeName、...但没有提及 kCTStrikethrough_anything。

我应该怎么做才能显示 *$|#!@ 条删除线?

【问题讨论】:

cocoanetics.com/2011/01/befriending-core-text 对我来说效果很好...享受吧! 【参考方案1】:

在 iOS 6 中,您可以使用 NSStrikethroughStyleAttributeName

[attributedString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:selectedRange];

虽然它可能看起来不合适,但 numberWithInt 值作为 NSUnderlineStyleSingle 是正确的。

【讨论】:

不过,如果你使用Core Text来渲染属性字符串,它不会渲染删除线,即使在iOS7.1中也是如此【参考方案2】:

更简单的方法可能是两个标签,使用此问题的答案 - Pixel Width of the text in a UILabel - 删除其中一个标签中的文本。

【讨论】:

以上是关于iPhone 上的 CoreText 和删除线的主要内容,如果未能解决你的问题,请参考以下文章

CoreText

怎么删除Mac上多余的iPhone USB端口?

灰线出现在我在 iPhone 上的输入字段中

iPhone 上的 Div 滚动

删除FFIE和Webkit中按钮上的轮廓线和虚线

Core Graphics 触摸时画线和删除