带有文字的UILabel
我想创build一个UILabel
,其中的文字是这样的
我怎样才能做到这一点? 当文字较小时,线条也应该很小。
SWIFT代码
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
然后:
yourLabel.attributedText = attributeString
为了使一些部分的string罢工,然后提供范围
let somePartStringRange = (yourStringHere as NSString).range(of: "Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Objective-C的
在iOS 6.0中> UILabel
支持NSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"]; [attributeString addAttribute:NSStrikethroughStyleAttributeName value:@2 range:NSMakeRange(0, [attributeString length])];
迅速
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
定义 :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
name :指定属性名称的string。 属性键可以由另一个框架提供,也可以是您定义的定制键。 有关在何处查找系统提供的属性键的信息,请参阅NSAttributedString类参考中的概述部分。
value :与名称关联的属性值。
aRange :指定的属性/值对应用的字符范围。
然后
yourLabel.attributedText = attributeString;
对于lesser than iOS 6.0 versions
您需要使用3-rd party component
来执行此操作。 其中一个是TTTAttributedLabel ,另一个是OHAttributedLabel 。
我更喜欢NSAttributedString
而不是NSMutableAttributedString
这个简单的例子:
NSAttributedString * title = [[NSAttributedString alloc] initWithString:@"$198" attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}]; [label setAttributedText:title];
用于指定属性string的NSUnderlineStyleAttributeName
和NSStrikethroughStyleAttributeName
属性的常量:
typedef enum : NSInteger { NSUnderlineStyleNone = 0x00, NSUnderlineStyleSingle = 0x01, NSUnderlineStyleThick = 0x02, NSUnderlineStyleDouble = 0x09, NSUnderlinePatternSolid = 0x0000, NSUnderlinePatternDot = 0x0100, NSUnderlinePatternDash = 0x0200, NSUnderlinePatternDashDot = 0x0300, NSUnderlinePatternDashDotDot = 0x0400, NSUnderlineByWord = 0x8000 } NSUnderlineStyle;
SWIFT代码
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
然后:
yourLabel.attributedText = attributeString
感谢王子的回答 ;)
在Swift中,使用单个删除线样式的枚举:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]) label.attributedText = attrString
其他删除线样式( 请记住使用.rawValue访问枚举 ):
- NSUnderlineStyle.StyleNone
- NSUnderlineStyle.StyleSingle
- NSUnderlineStyle.StyleThick
- NSUnderlineStyle.StyleDouble
删除线样式(与样式进行或运算):
- NSUnderlineStyle.PatternDot
- NSUnderlineStyle.PatternDash
- NSUnderlineStyle.PatternDashDot
- NSUnderlineStyle.PatternDashDotDot
指定删除线只能跨单词(而不是空格)应用:
- NSUnderlineStyle.ByWord
你可以在IOS 6中使用NSMutableAttributedString来完成。
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"]; [attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])]; yourLabel.attributedText = attString;
使用下面的代码
NSString* strPrice = @"£399.95"; NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:strPrice]; [finalString addAttribute: NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger: NSUnderlineStyleSingle] range: NSMakeRange(0, [titleString length])]; self.lblOldPrice.attributedText = finalString;
对于任何人看如何在tableview单元格(Swift)中做这个,你必须像这样设置.attributeText:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("TheCell")! let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: message) attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length)) cell.textLabel?.attributedText = attributeString return cell }
如果你想删除删除线,否则它会坚持!
cell.textLabel?.attributedText = nil
对于那些面临多行文字攻击的问题
let attributedString = NSMutableAttributedString(string: item.name!) //necessary if UILabel text is multilines attributedString.addAttribute(NSBaselineOffsetAttributeName, value: 0, range: NSMakeRange(0, attributedString.length)) attributedString.addAttribute(NSStrikethroughStyleAttributeName, value: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue), range: NSMakeRange(0, attributedString.length)) attributedString.addAttribute(NSStrikethroughColorAttributeName, value: UIColor.darkGray, range: NSMakeRange(0, attributedString.length)) cell.lblName.attributedText = attributedString