我使用MapKit记录跑步距离。我有以下代码:
var runningDistance : Double = 0{
didSet{
guard let text = runningDistanceLabel.attributedText as? NSMutableAttributedString else{return}
let range = NSMakeRange(0, 4)
let attributeString = NSAttributedString(string: String(format:"%.2f",runningDistance/1000.0), attributes: [
NSFontAttributeName:UIFont(name: "DINCondensed-Bold", size: 17)!
])
text.replaceCharacters(in: range, with: attributeString)
runningDistanceLabel.attributedText = text
print(runningDistanceLabel.text)
print(runningDistanceLabel.attributedText)
}
}
userLocation
更新时,我会计算距离并设置runningDistance
。
在控制台中:
Optional("0.04公里")
Optional(0.04{
NSFontAttributeName = "Optional(<UICTFont: 0x7ff79b7b7250> font-family: \"DIN Condensed\"; font-weight: bold; font-style: normal; font-size: 17.00pt)";
}公里{
NSFont = "<UICTFont: 0x7ff79d800110> font-family: \".PingFangSC-Regular\"; font-weight: normal; font-style: normal; font-size: 14.00pt";
NSParagraphStyle = "Alignment 2, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 4, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
})
这表明runningDistanceLabel
&#39; text
和attributedText
已设置并更改。 但在模拟器中,标签的文字保持不变。
如果我更换:
runningDistanceLabel.attributedText = text
使用:
runningDistanceLabel.text = "\(runningDistance)"
然后在模拟器中,标签的文本可以正常更改。
关于设置attributedText的代码有什么问题?如何设置attributedText
并在模拟器中正确更新?
非常感谢!
修改
我确信guard
已被传递,因为它已在控制台中打印了标签的文本和来自的textText,并且我添加了一个断点来测试它。
我也试试:
DispatchQueue.main.async {[unowned self] in
self.runningDistanceLabel.attributedText = text
}
但我仍然无法更新标签的文字。
Soluion
借助 Rroobb 的帮助,我在设置labelText之前添加了一行代码来设置标签的文字:
runningDistanceLabel.text = String(format:"%.2f",runningDistance/1000.0) + "公里"
runningDistanceLabel.attributedText = text
在模拟器中,标签的文字现在可以更新。惊人!
在关于UILabel
attributedText
为此属性分配新值也会使用相同的字符串数据替换text属性的值,尽管没有任何格式信息。
似乎设置attributedText
可以自动更改text
属性。
但在此,我不知道为什么在设置text
之前设置attributedText
以更新标签文字。
答案 0 :(得分:1)
这有效,我添加了两行代码:
var runningDistance : Double = 0.0 {
didSet{
guard let text = runningDistanceLabel.attributedText as? NSMutableAttributedString else{
return
}
let range = NSMakeRange(0, 4)
runningDistanceLabel.text = String(format:"%.2f",runningDistance/1000.0) //here
runningDistanceLabel.font = UIFont(name: "DINCondensed-Bold", size: 17) // here
let attributeString = NSAttributedString(string: String(format:"%.2f",runningDistance/1000.0), attributes: [
"NSFontAttributeName":UIFont(name: "DINCondensed-Bold", size: 17)!
])
text.replaceCharacters(in: range, with: attributeString)
runningDistanceLabel.attributedText = text
print(runningDistanceLabel.text!)
print(runningDistanceLabel.attributedText!)
}
}