我已经找到了如何将字母间距设置为UILabel(此处),但此方法不适用于UIButtons.有谁知道怎么做?
这是我正在使用的代码
let buttonString = agreementButton.attributedTitleForState(.Normal) as! NSMutableAttributedString buttonString.addAttribute(NSKernAttributeName, value: 1.0, range: NSMakeRange(0, buttonString.length)) agreementButton.setAttributedTitle(buttonString, forState: .Normal)
它抛出了一个错误: 'NSConcreteAttributedString' (0x19e508660) to 'NSMutableAttributedString' (0x19e506a40).
Swift 3.0
extension UIButton{ func addTextSpacing(spacing: CGFloat){ let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!) attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: (self.titleLabel?.text!.characters.count)!)) self.setAttributedTitle(attributedString, for: .normal) } } btnRegister.addTextSpacing(spacing: 4.5) extension UILabel{ func addTextSpacing(spacing: CGFloat){ let attributedString = NSMutableAttributedString(string: self.text!) attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: self.text!.characters.count)) self.attributedText = attributedString } } lblOne.addTextSpacing(spacing: 4.5) extension UITextField{ func addPlaceholderSpacing(spacing: CGFloat){ let attributedString = NSMutableAttributedString(string: self.placeholder!) attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: self.placeholder!.characters.count)) self.attributedPlaceholder = attributedString } } txtUserName.addPlaceholderSpacing(spacing: 4.5) extension UINavigationItem{ func addSpacing(spacing: CGFloat){ let attributedString = NSMutableAttributedString(string: self.title!) attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: self.title!.characters.count)) let label = UILabel() label.textColor = UIColor.black label.font = UIFont.systemFont(ofSize: 15, weight: UIFontWeightBold) label.attributedText = attributedString label.sizeToFit() self.titleView = label } } navigationItem.addSpacing(spacing: 2.5)
NSAttributedString
在你链接的问题中做出类似的话
打电话setAttributedTitle(_ ,forState:)
给你UIButton
试试这个(未经测试):
let title = agreementButton.titleForState(.Normal) let attributedTitle = NSAttributedString(string: title, attributes: [NSKernAttributeName: 1.0]) agreementButton.setAttributedTitle(attributedTitle, forState: .Normal)
斯威夫特4
extension UIButton{ func addTextSpacing(_ letterSpacing: CGFloat){ let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!) attributedString.addAttribute(NSAttributedString.Key.kern, value: letterSpacing, range: NSRange(location: 0, length: (self.titleLabel?.text!.count)!)) self.setAttributedTitle(attributedString, for: .normal) } } // Usage: button.addTextSpacing(5.0)