Este dilema se puede abordar de diversas formas, pero nosotros te dejamos la que para nosotros es la respuesta más completa.
Solución:
Puede hacer esto usando NSAttributedString
Ejemplo:
let underlineAttribute = [NSAttributedString.Key.underlineStyle: NSUnderlineStyle.thick.rawValue]
let underlineAttributedString = NSAttributedString(string: "StringWithUnderLine", attributes: underlineAttribute)
myLabel.attributedText = underlineAttributedString
EDITAR
Tener lo mismo attributes para todos los textos de un UILabel, te sugiero que subclases UILabel y el texto predominante, así:
Rápido 5
Igual que Swift 4.2 pero: Deberías preferir el inicializador Swift NSRange
sobre el viejo NSMakeRange
, puedes acortarlo a .underlineStyle
y los saltos de línea mejoran la legibilidad para llamadas de método largas.
class UnderlinedLabel: UILabel
override var text: String?
didSet
guard let text = text else return
let textRange = NSRange(location: 0, length: text.count)
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(.underlineStyle,
value: NSUnderlineStyle.single.rawValue,
range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
Rápido 4.2
class UnderlinedLabel: UILabel
override var text: String?
didSet
guard let text = text else return
let textRange = NSMakeRange(0, text.count)
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSAttributedString.Key.underlineStyle , value: NSUnderlineStyle.single.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
Swift 3.0
class UnderlinedLabel: UILabel
override var text: String?
didSet
guard let text = text else return
let textRange = NSMakeRange(0, text.characters.count)
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSUnderlineStyleAttributeName , value: NSUnderlineStyle.styleSingle.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
Y pones tu texto así:
@IBOutlet weak var label: UnderlinedLabel!
override func viewDidLoad()
super.viewDidLoad()
label.text = "StringWithUnderLine"
VIEJO:
Rápido (2.0 a 2.3):
class UnderlinedLabel: UILabel
override var text: String?
didSet
guard let text = text else return
let textRange = NSMakeRange(0, text.characters.count)
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSUnderlineStyleAttributeName, value:NSUnderlineStyle.StyleSingle.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
Rápido 1.2:
class UnderlinedLabel: UILabel
override var text: String!
didSet
let textRange = NSMakeRange(0, count(text))
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSUnderlineStyleAttributeName, value:NSUnderlineStyle.StyleSingle.rawValue, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
Swift 5 y 4.2 un trazador de líneas:
label.attributedText = NSAttributedString(string: "Text", attributes:
[.underlineStyle: NSUnderlineStyle.single.rawValue])
Swift 4 un trazador de líneas:
label.attributedText = NSAttributedString(string: "Text", attributes:
[.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])
Swift 3 un trazador de líneas:
label.attributedText = NSAttributedString(string: "Text", attributes:
[NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue])
Si está buscando una forma de hacer esto sin herencia:
Rápido 5
extension UILabel
func underline()
if let textString = self.text
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle,
value: NSUnderlineStyle.single.rawValue,
range: NSRange(location: 0, length: attributedString.length))
attributedText = attributedString
Rápido 3/4
// in swift 4 - switch NSUnderlineStyleAttributeName with NSAttributedStringKey.underlineStyle
extension UILabel
func underline()
if let textString = self.text
let attributedString = NSMutableAttributedString(string: textString)
attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: NSRange(location: 0, length: attributedString.length))
attributedText = attributedString
extension UIButton
func underline()
let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!)
attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: NSRange(location: 0, length: (self.titleLabel?.text!.characters.count)!))
self.setAttributedTitle(attributedString, for: .normal)
Recuerda dar visibilidad a esta noticia si te fue útil.