- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用 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
已经通过,因为它在控制台中打印了标签的文本和 attributedText 并且我添加了一个断点来测试它。
我也试试:
DispatchQueue.main.async {[unowned self] in
self.runningDistanceLabel.attributedText = text
}
但我仍然无法更新标签的文本。
解决方案
在 Rroobb 的帮助下,我在设置属性文本之前添加了一行代码来设置标签的文本:
runningDistanceLabel.text = String(format:"%.2f",runningDistance/1000.0) + "公里"
runningDistanceLabel.attributedText = text
并且在模拟器中,标签的文本现在可以更新了。太棒了!
在关于 UILabel
的 attributedText
的 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/
我有一个包含属性文本的 UITextView。我试图将它居中(因为文本是属性的,textView.TextAlignment 不起作用)。 我该怎么办?我试过这个: var attributes =
我需要在UITableViewCell中显示文字,需要设置tableView的高度。我使用以下方法动态计算行高。但实际高度却比实际高度高很多。 + (CGFloat)getquestionLabelH
在某些情况下,我必须使用 UITextView 而不是 UILabel(使链接属性可点击)。这是我的代码: let attributedString = NSMutableAttributed
我需要显示带有两种不同样式(不同颜色,部分文本加粗)的文本的 UILabel。使用 attributedText 属性很容易解决这个问题。 我的问题是文本可能会或可能不会超过我可以放入标签的长度。当使
我发现绘制边框是在 DTCoreText 中实现的。但是找不到任何关于如何做到这一点的资源。我收到一些 html 文本,对其进行修改,然后使用 DTAttributedTextContentView
Heloo..我是 ios、swift 和 xcode 的新手... 我在 swift 文件中有这样的逻辑: class ExpandableHeaderView: UITableViewHeader
我有一个表格 View 。 tableview 的目的是显示源自 UISearchBar 用户输入的搜索结果。 tableview 有一个自定义的 tableview 单元格,其中有一个标签和 UIT
我使用的是 Swift 4 和 Xcode 9.2。 我有一个 UILabel,在它们的 .attributedText 属性中我关联了一个 NSMutableAttributedString。事实上
这个问题在这里已经有了答案: Replace UITextViews text with attributed string (4 个答案) 关闭 6 年前。 我有一个 textView,我想给它一
我正在尝试将属性文本设置为基本 UITableViewCell 中“textlabel”的值。但是,单元格显示为空白!这是代码 UITableViewCell *cell = [tableView d
我的应用程序中有一个 View Controller ,用于调试以显示应用程序的一些内部结构(仅适用于本地 xcode 构建,应用程序商店版本没有此 Controller )。 在这个 Control
我需要在 TextView 中使用两种不同的字体,所以我在 textViewDidChange 中设置了属性文本。但是对于日文键盘,输入的字符是重复输入的。 它适用于英文键盘。当您使用普通文本而不是属
在 interfaceBuilder 中,我创建了一个简单的 UILabel。它里面有文本,我将它设置为 attributedText。我无法更改字体大小。每次我尝试更改字体并运行程序时,字体都保持不
我创建了一个可处理 RTF 文件的小型文本编辑器。该文件被读入用户可以编辑的 UITextView 中。 UITextView 使用 目前,当选择一定范围的文本并按下粗体按钮时,我会执行以下操作: N
我需要在我的 UILabel 中找到我的角色位置(它有 ParagraphLineSpacing 和带多行的 AttributedText), 我有我的角色的索引,但现在我无法从我的索引中获取 X 和
几个星期以来,我一直在断断续续地研究一个错误(因为它让我发疯),但我似乎无法深入了解它,所以我正在伸出援手希望有人能为我阐明这一点...... 我在 XIB 文件中有一个基本的 UITextView
我正在尝试将撤消 和重做 功能添加到我的UITextView 实现中。我使用的是 attributedText 而不仅仅是 UITextView 的 text 属性。我尝试使用 undoManager
你好我正在做一个 Twitter 应用程序,我想给主题标签、用户名和 URL 上色这是我的手机上的课 class TweetTableViewCell: UITableViewCell { var t
我有一个 UITextView,当键入某些字符时,它会被解析并更改其属性。文本未更改,仅更改描述文本格式的属性。 如果我对每个字符条目进行解析,我实际上是在抓取 text,创建具有正确格式的属性字符串
有什么方法可以判断 UILabel 是否使用 label.attributedText 或 label.text 属性设置了文本? 问题是当您设置 attributedText 时,text 也会更新
我是一名优秀的程序员,十分优秀!