Я хочу створити UILabel
текст, у якому текст такий
Як я можу це зробити? Коли текст невеликий, рядок також повинен бути малим.
NSAttributedString
і UILabel attributedText
властивості.
Я хочу створити UILabel
текст, у якому текст такий
Як я можу це зробити? Коли текст невеликий, рядок також повинен бути малим.
NSAttributedString
і UILabel attributedText
властивості.
Відповіді:
SWIFT 4 ОНОВЛЕННЯ КОДУ
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, 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:
name : рядок із зазначенням імені атрибута. Ключі атрибутів можуть поставлятися в іншій рамці або можуть бути спеціальні, визначені вами. Для отримання інформації про те, де знайти надані системою ключі атрибутів, дивіться розділ огляду в NSAttributedString Reference Reference.
значення : значення атрибута, пов'язане з ім'ям.
aRange : Діапазон символів, до якого застосовується вказаний параметр атрибут / значення.
Тоді
yourLabel.attributedText = attributeString;
Для цього lesser than iOS 6.0 versions
вам потрібно 3-rd party component
це зробити. Один з них - TTTAttributedLabel , інший - OHAttributedLabel .
У Swift, використовуючи enum для стилю одиночної закресленої лінії:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Додаткові закреслені стилі (не забудьте отримати доступ до enum за допомогою .rawValue ):
Накреслені візерунки (бути OR-ed зі стилем):
Вкажіть, що закреслення слід застосовувати лише через слова (а не пробіли):
Я віддаю перевагу, 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;
Прорив у Swift 5.0
let attributeString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range: NSMakeRange(0, attributeString.length))
self.yourLabel.attributedText = attributeString
Це працювало на мене, як на чарівність.
Використовуйте його як розширення
extension String {
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range:NSMakeRange(0,attributeString.length))
return attributeString
}
}
Телефонуйте так
myLabel.attributedText = "my string".strikeThrough()
Розширення UILabel для закреслення Увімкнути / Вимкнути.
extension UILabel {
func strikeThrough(_ isStrikeThrough:Bool) {
if isStrikeThrough {
if let lblText = self.text {
let attributeString = NSMutableAttributedString(string: lblText)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0,attributeString.length))
self.attributedText = attributeString
}
} else {
if let attributedStringText = self.attributedText {
let txt = attributedStringText.string
self.attributedText = nil
self.text = txt
return
}
}
}
}
Використовуйте його так:
yourLabel.strikeThrough(btn.isSelected) // true OR false
ШВИДКИЙ КОД
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
тоді:
yourLabel.attributedText = attributeString
Завдяки відповіді принца ;)
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
Іншим методом є застосовуване розширення String
Extension
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 - оновлення грудня 2017 року
Кредит на @kuzdu - оновлення серпня 2018 року
value
0
та проїжджаєте через value: NSUnderlineStyle.styleSingle.rawValue
Ви можете зробити це в IOS 6 за допомогою NSMutableAttributedString.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Закресліть текст UILabel в iOS Swift. Запросіть спробувати це працює для мене
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
Швидкий 5
extension String {
/// Apply strike font on text
func strikeThrough() -> NSAttributedString {
let attributeString = NSMutableAttributedString(string: self)
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: 1,
range: NSRange(location: 0, length: attributeString.length))
return attributeString
}
}
Приклад:
someLabel.attributedText = someText.strikeThrough()
Для всіх, хто шукає, як це зробити у комірці viewview (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
Швидкий 4.2
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: product.price)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length))
lblPrice.attributedText = attributeString
Я можу запізнитися на вечірку.
У всякому разі, я знаю про це, NSMutableAttributedString
але останнім часом я досяг тієї ж функціональності, дещо інший підхід.
Після виконання всіх вищезазначених кроків мій Label, UIView та його обмеження виглядали нижче зображення.
Використовуйте код нижче
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;
Змініть властивість тексту на атрибутивну та виберіть текст та клацніть правою кнопкою миші, щоб отримати властивість шрифту. Клацніть на перекреслення.
Для тих, хто стикається з багаторядковим текстовим попередженням
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
Створіть розширення String та додайте нижче метод
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
Швидкий 4 і 5
extension NSAttributedString {
/// Returns a new instance of NSAttributedString with same contents and attributes with strike through added.
/// - Parameter style: value for style you wish to assign to the text.
/// - Returns: a new instance of NSAttributedString with given strike through.
func withStrikeThrough(_ style: Int = 1) -> NSAttributedString {
let attributedString = NSMutableAttributedString(attributedString: self)
attributedString.addAttribute(.strikethroughStyle,
value: style,
range: NSRange(location: 0, length: string.count))
return NSAttributedString(attributedString: attributedString)
}
}
Приклад
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)