gpt4 book ai didi

ios - 设置 attributedText 后 UILabel 不更新

转载 作者:搜寻专家 更新时间:2023-10-31 08:06:16 24 4
gpt4 key购买 nike

我使用 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";
})

这表明 runningDistanceLabeltextattributedText 已设置和更改。 但在模拟器中,标签的文本保持不变。

如果我替换:

runningDistanceLabel.attributedText = text

与:

runningDistanceLabel.text = "\(runningDistance)"

然后在模拟器中,标签的文字就可以正常改变了。

关于设置 attributedText 的代码有什么问题?如何在模拟器中设置attributedText并正确更新?

非常感谢!

编辑:

我确定 guard 已经通过,因为它在控制台中打印了标签的文本和 attributedText 并且我添加了一个断点来测试它。

我也试试:

DispatchQueue.main.async {[unowned self] in
self.runningDistanceLabel.attributedText = text
}

但我仍然无法更新标签的文本。

解决方案

Rroobb 的帮助下,我在设置属性文本之前添加了一行代码来设置标签的文本:

runningDistanceLabel.text = String(format:"%.2f",runningDistance/1000.0) + "公里"
runningDistanceLabel.attributedText = text

并且在模拟器中,标签的文本现在可以更新了。太棒了!

在关于 UILabelattributedText 的 iOS 文档中:

Assigning a new value to this property also replaces the value of the text property with the same string data, albeit without any formatting information.

好像设置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!)
}
}

关于ios - 设置 attributedText 后 UILabel 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com