UILabel с текстом пробил

Я хочу создатьUILabel в котором текст такой

Как я могу это сделать? Когда текст маленький, строка также должна быть маленькой.

 SCS06 апр. 2019 г., 06:23
можно ли нажать на текст кнопки
 mopsled30 окт. 2012 г., 06:16
Возможный дубликат:stackoverflow.com/questions/10550732/...
 rmaddy30 окт. 2012 г., 06:23
Если вам нужна только поддержка iOS 6, вы можете сделать это сNSAttributedString иUILabel attributedText имущество.

Ответы на вопрос(14)

используя NSMutableAttributedString.

NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;

кто ищет, как это сделать в ячейке табличного представления (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

SWIFT 4

     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

Другой метод заключается в использовании String Extension

расширение

extension String{
    func strikeThrough()->NSAttributedString{
        : 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 - обновление декабря 2017

Кредит @kuzdu - обновление Авг 2018

 kuzdu27 июл. 2018 г., 17:15
Безразлично»я не работаю Пурненду Ройответ сработал для меня. Разница лишь в том, что вы проходите вvalue 0 и Пурненду Рой Пассvalue: NSUnderlineStyle.styleSingle.rawValue
 Muhammad Asyraf01 авг. 2018 г., 08:59
сделано @kuzdu проверить обновленный ответ
 Muhammad Asyraf01 авг. 2018 г., 08:54
@kuzdu Забавно, что мой ответ был еще в декабре 2017 года, он работает тогда, он просто скопировал мой код и добавил NSUnderlineStyle.styleSingle.rawValue ^ - ^ Но нет проблем, я обновлю этот ответ, чтобы сделать вас счастливыми

SWIFT-код

 NSMutableAttributedString =  NSMutableAttributedString(string: "Your Text")
    attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

затем:

yourLabel.attributedText = attributeString

БлагодаряПринц ответ ;)

 Sebastian Boldt22 окт. 2015 г., 14:40
Боже, я ненавижу быстрый синтаксис. Но спасибо за ответ.

кто сталкивается с проблемой многострочного текста

    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

Используйте код ниже


NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:strPrice];

[finalString addAttribute: NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger: NSUnderlineStyleSingle] range: NSMakeRange(0, [titleString length])];
self.lblOldPrice.attributedText = finalString;   

попробуйте это это 'работает на меня

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

Вы можете изменить свойstrikethroughStyle» как styleSingle, styleThick, styleDouble

Swift 4.2

 NSMutableAttributedString =  NSMutableAttributedString(string: product.price)

attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length))

lblPrice.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()
 Mohammad Razipour12 сент. 2018 г., 09:01
Спасибо отлично

let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString

Дополнительные зачеркнутые стили (Не забудьте получить доступ к перечислению, используя .rawValue):

NSUnderlineStyle.StyleNoneNSUnderlineStyle.StyleSingleNSUnderlineStyle.StyleThickNSUnderlineStyle.StyleDouble

Зачеркнутые шаблоны (для стилизации):

NSUnderlineStyle.PatternDotNSUnderlineStyle.PatternDashNSUnderlineStyle.PatternDashDotNSUnderlineStyle.PatternDashDotDot

Укажите, что зачеркивание должно применяться только к словам (не к пробелам):

NSUnderlineStyle.ByWord
 Mihai Fratu04 февр. 2016 г., 18:05
За проголосовали за использование правильной константы вместо числа
Решение Вопроса

SWIFT-код

 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)

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])];

стриж

: 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.

 Paresh Navadiya30 окт. 2012 г., 06:32
проверить отредактированный ответ
 Paresh Navadiya30 окт. 2012 г., 07:09
 Kay Cee18 июл. 2017 г., 11:12
Как получить удар по центру этикетки?
 Dev30 окт. 2012 г., 07:01
Можете ли вы предложить хороший Toutorial? Ссылка, которую вы предоставили, немного сложна для понимания .. :(
 Paresh Navadiya19 мая 2014 г., 15:46
@ Andy проверьте отредактированный ответ
 Hassan Taleb21 июн. 2017 г., 10:36
Почему NSAttributedStringKey.strikethroughStyle: NSUnderlineStyle.styleSingle.rawValue не работает в swift 4?
 Dev30 окт. 2012 г., 06:30
Для iOS 5.1.1 меньшей версии, как я могу использовать трехстороннюю атрибутированную метку для отображения атрибутивного текста:
 highmaintenance19 мая 2014 г., 14:34
Что такое @ 2? Волшебный номер?
 James Toomey22 сент. 2017 г., 01:00
Увидетьэтот Если у вас возникли проблемы с зачеркиванием.
 Jonauz13 апр. 2017 г., 06:15
Для меня это нене получится, если я попытаюсь зачеркнуть только часть строки, но не всю. Это предназначено? И возможно ли сделать это зачеркнутым одним словом в длинном тексте?
 Dev30 окт. 2012 г., 07:24
Можете ли вы объяснить, что я должен сделать для создания сторонней атрибутивной метки для ios?
 highmaintenance20 мая 2014 г., 21:02
Я полагаю, вы забыли совершить это. Вы должны использовать правильное значение из NSUnderlineStyle вместо @ 2. Я немного педантичен здесь.
 Mikkel Selsøe28 апр. 2015 г., 15:26
Это может быть выражено короче, без необходимости изменчивости:[[NSAttributedString alloc] initWithString:@"string" attributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}];

Создайте расширение String и добавьте ниже метод

static func makeSlashText(_ text:String) -> 

 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

я предпочитаюNSAttributedString скорее, чемNSMutableAttributedString для этого простого случая:

NSAttributedString * title =
    [[NSAttributedString alloc] initWithString:@"$198"
                                    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;  

Ваш ответ на вопрос