Voglio creare un UILabel
in cui il testo sia così
Come posso fare questo? Quando il testo è piccolo, anche la linea dovrebbe essere piccola.
NSAttributedString
e la UILabel attributedText
proprietà.
Voglio creare un UILabel
in cui il testo sia così
Come posso fare questo? Quando il testo è piccolo, anche la linea dovrebbe essere piccola.
NSAttributedString
e la UILabel attributedText
proprietà.
Risposte:
CODICE DI AGGIORNAMENTO SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
poi:
yourLabel.attributedText = attributeString
Per fare in modo che una parte della corda colpisca, fornire la portata
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Objective-C
In iOS 6.0> UILabel
supportaNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
veloce
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
Definizione :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
nome : una stringa che specifica il nome dell'attributo. Le chiavi degli attributi possono essere fornite da un altro framework o possono essere personalizzate definite dall'utente. Per informazioni su dove trovare le chiavi degli attributi fornite dal sistema, vedere la sezione panoramica in Riferimento alla classe NSAttributedString.
valore : il valore dell'attributo associato al nome.
aRange : l'intervallo di caratteri a cui si applica la coppia attributo / valore specificata.
Poi
yourLabel.attributedText = attributeString;
Perché lesser than iOS 6.0 versions
devi 3-rd party component
farlo. Uno di questi è TTTAttributedLabel , un altro è OHAttributedLabel .
In Swift, utilizzando l'enumerazione per uno stile di linea barrato:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Stili barrati aggiuntivi ( ricordarsi di accedere all'enumerazione utilizzando .rawValue ):
Schemi barrati (da modificare OR con lo stile):
Specifica che il barrato deve essere applicato solo tra le parole (non gli spazi):
Preferisco NSAttributedString
piuttosto che NSMutableAttributedString
per questo semplice caso:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
Costanti per specificare sia le NSUnderlineStyleAttributeName
e NSStrikethroughStyleAttributeName
gli attributi di una stringa attribuiti:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Barrato in 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
Ha funzionato per me come un fascino.
Usalo come estensione
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
}
}
Chiama così
myLabel.attributedText = "my string".strikeThrough()
Estensione UILabel per barrato Abilita / Disabilita.
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
}
}
}
}
Usalo in questo modo:
yourLabel.strikeThrough(btn.isSelected) // true OR false
CODICE SWIFT
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
poi:
yourLabel.attributedText = attributeString
Grazie alla risposta di Prince ;)
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
Un altro metodo consiste nell'usare String Extension
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
}
}
Chiamare la funzione: l' ho usata così
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
Ringraziamo @Yahya - aggiornamento dicembre 2017
Ringraziamo @kuzdu - aggiornamento agosto 2018
value
0
e si passa value: NSUnderlineStyle.styleSingle.rawValue
Puoi farlo in IOS 6 usando NSMutableAttributedString.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Barrare il testo UILabel in Swift iOS. Per favore prova questo funziona per me
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
Puoi cambiare il tuo "strikethroughStyle" come styleSingle, styleThick, styleDouble
Swift 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
}
}
Esempio:
someLabel.attributedText = someText.strikeThrough()
Per chiunque stia cercando come farlo in una cella tableview (Swift) devi impostare .attributeText in questo modo:
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
}
Se vuoi rimuovere il barrato, fallo altrimenti rimarrà in giro !:
cell.textLabel?.attributedText = nil
Swift 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
Potrei essere in ritardo alla festa.
Ad ogni modo, sono a conoscenza del NSMutableAttributedString
ma recentemente ho ottenuto la stessa funzionalità con un approccio leggermente diverso.
Dopo aver seguito tutti i passaggi precedenti, la mia etichetta, UIView e i suoi vincoli apparivano come nell'immagine sottostante.
Usa il codice sottostante
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;
Modificare la proprietà del testo in attribuito e selezionare il testo e fare clic con il tasto destro per ottenere la proprietà del carattere. Fare clic sul barrato.
Per coloro che affrontano problemi con lo sciopero del testo su più righe
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
Crea l'estensione String e aggiungi sotto il metodo
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
quindi usa per la tua etichetta in questo modo
yourLabel.attributedText = String.makeSlashText("Hello World!")
Questo è quello che puoi usare in Swift 4 perché NSStrikethroughStyleAttributeName è stato modificato in NSAttributedStringKey.strikethroughStyle
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
self.lbl.attributedText = attributeString
Swift 4 e 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)
}
}
Esempio
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)