UILabel с текстом ударил через
Я хочу создать UILabel
, в котором текст, как это
Как я могу это сделать? Когда текст маленький, строка также должна быть маленькой.
13 ответов:
SWIFT КОД
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
затем:
yourLabel.attributedText = attributeString
чтобы сделать какую-то часть строки, чтобы ударить затем обеспечить диапазон
let somePartStringRange = (yourStringHere as NSString).range(of: "Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
С
на 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:
имя : строка, указывающая имя атрибута. Ключи атрибутов могут быть предоставлены другой платформой или могут быть пользовательскими, которые вы определяете. Сведения о том, где найти ключи атрибутов, поставляемые системой, см. В разделе Обзор в Справочнике по классу NSAttributedString.
стоимостью: значение атрибута, связанное с именем.
aRange : диапазон символы, к которым применяется указанная пара атрибут/значение.
затем
yourLabel.attributedText = attributeString;
на
lesser than iOS 6.0 versions
вам нужно3-rd party component
для этого. Один из них -TTTAttributedLabel, другой OHAttributedLabel.
предпочитаю
NSAttributedString
, а неNSMutableAttributedString
для этого простого случая:NSAttributedString * title = [[NSAttributedString alloc] initWithString:@"8" attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}]; [label setAttributedText:title];
константы для указания
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 attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]) label.attributedText = attrString
дополнительные перечеркнутым шрифтом (Не забудьте получить доступ к перечислению с помощью .rawValue):
- NSUnderlineStyle.StyleNone
- NSUnderlineStyle.StyleSingle
- NSUnderlineStyle.Стилетик
- NSUnderlineStyle.StyleDouble
зачеркнутые шаблоны (быть или-ed с помощью стиль):
- NSUnderlineStyle.PatternDot
- NSUnderlineStyle.PatternDash
- NSUnderlineStyle.PatternDashDot
- NSUnderlineStyle.PatternDashDotDot
укажите, что зачеркивание должно применяться только к словам (не пробелам):
- NSUnderlineStyle.Притча
SWIFT КОД
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
затем:
yourLabel.attributedText = attributeString
спасибо князь ответа;)
зачеркнуть в Swift 4.0
let attributeString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length)) self.yourLabel.attributedText = attributeString
это сработало для меня как шарм.
использовать его в качестве дополнения
extension String { func strikeThrough() -> NSAttributedString { let attributeString = NSMutableAttributedString(string: self) attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0,attributeString.length)) return attributeString } }
звоните вот так
myLabel.attributedText = "my string".strikeThrough()
вы можете сделать это в IOS 6 с помощью NSMutableAttributedString.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"8"]; [attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])]; yourLabel.attributedText = attString;
SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text Goes Here") attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length)) self.lbl_productPrice.attributedText = attributeString
другой метод-использовать расширение строки
расширениеextension String{ func strikeThrough()->NSAttributedString{ let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: self) attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length)) return attributeString } }
вызов функции : использовал его так
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
кредит @Yahya- обновление Dec 2017
кредит @kuzdu- обновление Aug 2018
вычеркните текст UILabel в Swift iOS. Пожалуйста, попробуйте это он работает для меня
let attributedString = NSMutableAttributedString(string:"12345") attributedString.addAttribute(NSAttributedStringKey.baselineOffset, value: 0, range: NSMakeRange(0, attributedString.length)) attributedString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSNumber(value: NSUnderlineStyle.styleThick.rawValue), range: NSMakeRange(0, attributedString.length)) attributedString.addAttribute(NSAttributedStringKey.strikethroughColor, value: UIColor.gray, range: NSMakeRange(0, attributedString.length)) yourLabel.attributedText = attributedString
вы можете изменить свой "зачеркнутый стиль", как styleSingle, styleThick, styleDouble
для тех, кто смотрит на то, как это сделать в ячейке 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
использовать ниже код
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;
для тех, кто сталкивается с проблемой многострочного текста strike
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
создать расширение строки и добавить ниже метод
static func makeSlashText(_ text:String) -> NSAttributedString { let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text) attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length)) return attributeString }
затем использовать для наклейки такой
yourLabel.attributedText = String.makeSlashText("Hello World!")
Это тот, который вы можете использовать в Swift 4, потому что NSStrikethroughStyleAttributeName был изменен на NSAttributedStringKey.strikethroughStyle
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text") attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length)) self.lbl.attributedText = attributeString