iPhone 上的 CoreText 和删除线
Posted
技术标签:
【中文标题】iPhone 上的 CoreText 和删除线【英文标题】:CoreText and strikethrough on iPhone 【发布时间】:2011-09-28 14:04:45 【问题描述】:我目前正在努力解决在许多UITableViewCell
s 中显示删除线文本的需求。用 html 编写的东西看起来像
99 欧元节省 50% => 现在 49 欧元
我不想将UIWebView
仅用于单行文本,尤其是在较小的UITableViewCell
s 中使用它。我知道有可重复使用的单元格,但我希望尽可能以更节省内存的方式保存。
所以...我正在使用 NSAttributedString
s,在 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.h
、Foundation/NSAttributedString.h
,但无济于事。我在网上的某个地方看到过
NSStrikethroughStyleAttributeName = @"NSStrikethroughStyleAttributeName"
,以及 NSUnderlinePatternSolid = 0
和 NSUnderlineStyleSingle = 1
,但是硬编码这些值并没有给出任何结果。
我通过自动完成获得的一件事是等效的 kCT...*
常量,但有 kCTUnderlineStyleAttributeName
、kCTStrokeWidthAttributeName
、...但没有提及 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 和删除线的主要内容,如果未能解决你的问题,请参考以下文章