FS.*_*.O6 10 nsattributedstring uilabel ios swift
我添加一个图标到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()
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,图标没有垂直对齐
有谁知道我该如何对齐它?
谢谢!
War*_*shi 19
使用 的bounds属性NSTextAttachment。
//Setting up icon
let moneyIcon = NSTextAttachment()
moneyIcon.image = UIImage(named: "MoneyIcon")
let imageSize = moneyIcon.image!.size
moneyIcon.bounds = CGRect(x: CGFloat(0), y: (font.capHeight - imageSize.height) / 2, width: imageSize.width, height: imageSize.height)
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()
Run Code Online (Sandbox Code Playgroud)
Tam*_*gel 13
这个答案是关于将两种不同大小的字体垂直居中在一个单一的NSAttributedString,提到使用基线偏移来计算字符串的中心。
您可以在使用图像时使用相同的方法:
从图像的高度中减去字体大小并将其除以 2。
从值中减去字体的下行(因为字体大小与字体的上升不同)。您特别使用的字体 ( Baloo-Regular ) 具有与标准不同的下行值,应除以 2。其他字体(包括 San Fransisco)不需要该修复或需要不同的除数。
此代码涵盖了大多数情况,如果您的字体行为不同,您应该查看Text Kit 中管理文本的指南。
// *Setting up icon*
let moneyIcon = NSTextAttachment()
// If you're sure a value is not and will never be nil, you can use "!".
// Otherwise, avoid it.
let moneyImage = UIImage(named: "MoneyIcon")!
moneyIcon.image = moneyImage
let moneyIconString = NSAttributedString(attachment: moneyIcon)
// *Setting up NSAttributedString attributes*
let balanceFontSize: CGFloat = 16
let balanceFont = UIFont(name: "Baloo", size: balanceFontSize)!
let balanceBaselineOffset: CGFloat = {
let dividend = moneyImage.size.height - balanceFontSize
return dividend / 2 - balanceFont.descender / 2
}()
let balanceAttr: [NSAttributedString.Key: Any] = [
.font: balanceFont,
.baselineOffset: balanceBaselineOffset
]
// *Setting up text*
let balanceString = NSMutableAttributedString(
string: " 1,702,200",
attributes: balanceAttr
)
balanceString.insert(moneyIconString, at: 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4580 次 |
| 最近记录: |