Ich möchte ein erstellen, UILabel
in dem der Text so ist
Wie kann ich das machen? Wenn der Text klein ist, sollte auch die Zeile klein sein.
NSAttributedString
und der UILabel attributedText
Eigenschaft tun .
Ich möchte ein erstellen, UILabel
in dem der Text so ist
Wie kann ich das machen? Wenn der Text klein ist, sollte auch die Zeile klein sein.
NSAttributedString
und der UILabel attributedText
Eigenschaft tun .
Antworten:
SWIFT 4 UPDATE CODE
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
dann:
yourLabel.attributedText = attributeString
Um einen Teil der Saite zum Schlagen zu bringen, geben Sie die Reichweite an
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
Ziel c
In iOS 6.0> UILabel
unterstütztNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
Schnell
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
Definition :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
name : Eine Zeichenfolge, die den Attributnamen angibt. Attributschlüssel können von einem anderen Framework bereitgestellt werden oder von Ihnen definierte benutzerdefinierte Schlüssel sein. Informationen dazu, wo Sie die vom System bereitgestellten Attributschlüssel finden, finden Sie im Übersichtsabschnitt in der NSAttributedString-Klassenreferenz.
value : Der Attributwert, der dem Namen zugeordnet ist.
aRange : Der Zeichenbereich, für den das angegebene Attribut / Wert-Paar gilt.
Dann
yourLabel.attributedText = attributeString;
Dafür lesser than iOS 6.0 versions
musst du 3-rd party component
das tun. Einer von ihnen ist TTTAttributedLabel , ein anderer ist OHAttributedLabel .
Verwenden Sie in Swift die Aufzählung für den einzelnen durchgestrichenen Linienstil:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Zusätzliche durchgestrichene Stile ( Denken Sie daran, mit .rawValue auf die Aufzählung zuzugreifen ):
Durchgestrichene Muster (mit dem Stil ODER-bearbeitet zu werden):
Geben Sie an, dass das Durchstreichen nur auf Wörter (nicht auf Leerzeichen) angewendet werden soll:
Ich bevorzuge NSAttributedString
eher als NSMutableAttributedString
für diesen einfachen Fall:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
Konstanten zum Angeben von NSUnderlineStyleAttributeName
und NSStrikethroughStyleAttributeName
Attributen einer zugeordneten Zeichenfolge:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Durchgestrichen 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
Es hat bei mir wie ein Zauber funktioniert.
Verwenden Sie es als Erweiterung
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
}
}
Rufen Sie so an
myLabel.attributedText = "my string".strikeThrough()
UILabel-Erweiterung zum Durchstreichen Aktivieren / Deaktivieren.
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
}
}
}
}
Verwenden Sie es so:
yourLabel.strikeThrough(btn.isSelected) // true OR false
SWIFT-CODE
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
dann:
yourLabel.attributedText = attributeString
Danke an Prince Antwort ;)
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
Eine andere Methode ist die Verwendung der 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
}
}
Aufruf der Funktion: Verwendet es so
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
Gutschrift an @Yahya - Aktualisierung Dezember 2017
Gutschrift an @kuzdu - Aktualisierung August 2018
value
0
und Purnendu Roy passierenvalue: NSUnderlineStyle.styleSingle.rawValue
Sie können dies unter iOS 6 mit NSMutableAttributedString tun.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Streichen Sie UILabel-Text in Swift iOS durch. Bitte versuchen Sie es, es funktioniert für mich
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
Sie können Ihren "StrikethroughStyle" wie styleSingle, styleThick, styleDouble ändern
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
}
}
Beispiel:
someLabel.attributedText = someText.strikeThrough()
Für alle, die dies in einer Tabellenansichtszelle (Swift) tun möchten, müssen Sie den .attributeText wie folgt festlegen:
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
}
Wenn Sie den Durchgestrichenen entfernen möchten, tun Sie dies, sonst bleibt er bestehen!:
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
Ich könnte zu spät zur Party kommen.
Wie auch immer, ich bin mir dessen bewusst, NSMutableAttributedString
aber kürzlich habe ich die gleiche Funktionalität mit einem etwas anderen Ansatz erreicht.
Nachdem ich alle oben genannten Schritte ausgeführt hatte, sahen mein Label, UIView und seine Einschränkungen wie im folgenden Bild aus.
Verwenden Sie den folgenden Code
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;
Ändern Sie die Texteigenschaft in "Attributiert", wählen Sie den Text aus und klicken Sie mit der rechten Maustaste, um die Schrifteigenschaft abzurufen. Klicken Sie auf das Durchgestrichene.
Für diejenigen, die Probleme mit mehrzeiligen Textstreiks haben
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
Erstellen Sie eine String-Erweiterung und fügen Sie die folgende Methode hinzu
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
Verwenden Sie dann für Ihr Etikett wie folgt
yourLabel.attributedText = String.makeSlashText("Hello World!")
Dies ist diejenige, die Sie in Swift 4 verwenden können, da NSStrikethroughStyleAttributeName in NSAttributedStringKey.strikethroughStyle geändert wurde
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
self.lbl.attributedText = attributeString
Swift 4 und 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)
}
}
Beispiel
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)