[英]UILabel doesn't update after setting attributedText
我使用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
的text
和attributedText
已被設置和更改。 但在模擬器中,標簽的文本保持不變。
如果我更換:
runningDistanceLabel.attributedText = text
有:
runningDistanceLabel.text = "\(runningDistance)"
然后在模擬器中,標簽的文本可以正常更改。
關於設置attributedText的代碼有什么問題? 如何在模擬器中正確設置attributedText
並更新?
非常感謝你!
編輯:
我確信已經通過了guard
因為它已經在控制台中打印了標簽的文本和來源,我添加了一個斷點來測試它。
我也嘗試:
DispatchQueue.main.async {[unowned self] in
self.runningDistanceLabel.attributedText = text
}
但我仍然無法更新標簽的文字。
Soluion
在Rroobb的幫助下,我在設置tagsText之前添加了一行代碼來設置標簽的文本:
runningDistanceLabel.text = String(format:"%.2f",runningDistance/1000.0) + "公里"
runningDistanceLabel.attributedText = text
在模擬器中,標簽的文本現在可以更新。 驚人!
在關於UILabel
的attributedText
iOS文檔中:
為此屬性分配新值也會使用相同的字符串數據替換text屬性的值,盡管沒有任何格式信息。
似乎設置attributedText
可以自動更改text
屬性。
但在這里我不知道為什么我應該在設置attributedText
之前設置text
以更新標簽的文本。
這有效,我添加了兩行代碼:
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!)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.