我已经找到了如何将字母间距设置为UILabel(here),但此方法不适用于UIButton。有人知道怎么做吗?
下面是我使用的代码
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).
9条答案
按热度按时间gwo2fgha1#
Swift 5.0
dw1jzc5e2#
1.使
NSAttributedString
像你链接的问题1.在
UIButton
上调用setAttributedTitle(_ ,forState:)
试试这个(未测试):
dfty9e193#
Swift 4酒店
sqxo8psd4#
不是一个完整的答案,而是一个GOTCHA和一个FIX。
GOTCHA:应用字符间距也会将空格添加到文本的END。此错误功能/错误意味着居中对齐的文本将错误显示。
FIX:当为属性化文本创建Range时,从text.count值中减去1(因此忽略字符串中的最后一个字符以用于间距目的)
例如,由于额外空间而导致不正确的居中:
固定:
[编辑]
与此相关的是,如果使用EdgeInsets在文本周围添加填充,则
UIButton
子类将需要覆盖intrinsicContentsSize:
3z6pesqy5#
Swift 5扩展名在此。
用法:您可以在脚本上或通过代码设置字母间距。
kq0g1dla6#
Code Different的解决方案不支持文本颜色设置。也可以重写UIButton类,使间距参数甚至在情节提要中也可用。下面是一个更新的Swift 3解决方案:
*Swift 3酒店,纽约
ig9co6j17#
基于
jaya raj
的答案更新Swift 4。f1tvaqid8#
Swift 5不强制解包更新:
我觉得这是一个更好的解决方案,因为我们迎合现有的属性按钮以及
dzjeubhm9#
Swift 5