UIButtonにコードから下線を引く

XibやStoryBoard上から下線を引く解説記事はたくさんあるのですが、コードからButtonに下線を引く方法の記事が見当たらなかったので残しておきます。

NSAttributedString

まず、文字に対して下線などを設定する場合通常のString型を設定するのではなく、NSAttributedString型に変換してから代入します。

@IBOutlet weak var button: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        let underline: [NSAttributedString.Key: Any] = [NSAttributedString.Key(rawValue: NSAttributedString.Key.underlineStyle.rawValue):NSUnderlineStyle.single.rawValue]
        let attributeText = NSAttributedString(string: "下線テスト", attributes: underline)
        button.setAttributedTitle(attributeText, for: .normal)
    }

下線の色変更

下線の色も変更したいときは下記のように色の設定も含めると色も変わってくれます。

let underline: [NSAttributedString.Key: Any] = [NSAttributedString.Key(rawValue:NSAttributedString.Key.underlineStyle.rawValue):NSUnderlineStyle.single.rawValue,NSAttributedString.Key.underlineColor: UIColor.red]