我在UILabel
内使用NSTextAttachment
向NSMutableAttributedString
添加了一个图标,如下所示:
//Setting up icon
let moneyIcon = NSTextAttachment()
moneyIcon.image = UIImage(named: "MoneyIcon")
let moneyIconString = NSAttributedString(attachment: moneyIcon)
//Setting up text
let balanceString = NSMutableAttributedString(string: " 1,702,200")
balanceString.insert(moneyIconString, at: 0)
//Adding string to label
self.attributedText = balanceString
self.sizeToFit()
但由于某种原因,图标没有垂直对齐
有人知道我该如何对齐它?
谢谢!
答案 0 :(得分:3)
This answer,关于在一个NSAttributedString
中垂直居中两个不同大小的字体,提到使用基线偏移来计算字符串的中心。
使用图像时可以使用相同的方法:
从图像的高度减去字体大小并除以2。
从值中减去字体的下划线(因为字体大小与字体的上升不同)。您特别使用的字体( Baloo-Regular )的下降值与标准不同,应除以2.其他字体(包括San Fransisco)不需要修复或要求不同的除数。
此代码涵盖了大多数情况,如果您的字体行为不同,则应该查看the guide for managing texts in Text Kit。
let moneyImage = UIImage(named: "MoneyIcon")!
//Setting up icon
let moneyIcon = NSTextAttachment()
moneyIcon.image = moneyImage
let moneyIconString = NSAttributedString(attachment: moneyIcon)
let balanceFontSize: CGFloat = 16
let balanceFont = UIFont(name: "Baloo", size: balanceFontSize)
//Setting up font and the baseline offset of the string, so that it will be centered
let balanceAttr: [NSAttributedStringKey: Any] = [.font: balanceFont,
.baselineOffset: (moneyImage.size.height - balanceFontSize) / 2 - balanceFont.descender / 2]
//Setting up text
let balanceString = NSMutableAttributedString(string: " 1,702,200", attributes: balanceAttr)
balanceString.insert(moneyIconString, at: 0)
答案 1 :(得分:0)
使用bounds
的{{1}}属性。
NSTextAttachment