倒计时期间iOS UILabel中的小数点对齐?
Posted
技术标签:
【中文标题】倒计时期间iOS UILabel中的小数点对齐?【英文标题】:Decimal point alignment in iOS UILabel during countdown? 【发布时间】:2015-10-07 14:07:02 【问题描述】:抱歉,我还没有任何代码,但希望得到一些建议!
我有一个倒计时计时器,它在 UILabel 中显示秒数(10.0、9.9、9.8 等)。它工作正常,但小数点会根据大小十进制值略微移动。有没有办法将 UILabel 中的文本与小数点对齐,或者我应该创建两个标签(一个用于右对齐的秒值,一个用于左对齐的十进制值)?
谢谢!
【问题讨论】:
【参考方案1】:我认为您对多个标签的建议是完全有效的。 这是一个属性字符串解决方案(对于 m:ss 但它也应该适用于浮点数):
let string = "\t43:21" // Sample min:sec. Note the leading tab is required in this code.
let countdownFont = UIFont.systemFontOfSize(13)
let terminators = NSCharacterSet(charactersInString: "\t:.") // in some locales '.' is used instead of ':'
let tabStop = NSTextTab(textAlignment: .Right, location: 40, options: [NSTabColumnTerminatorsAttributeName: terminators])
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.tabStops = [tabStop]
let attributeDictionary: [String: AnyObject] = [NSParagraphStyleAttributeName: paragraphStyle, NSFontAttributeName: countdownFont]
let attributedString = NSAttributedString(string: string, attributes: attributeDictionary)
self.countdownLabel.attributedText = attributedString
相关资源:
https://www.objc.io/issues/9-strings/string-rendering/#tables-with-numbers
https://library.oreilly.com/book/0636920034261/programming-ios-8-1st-edition/314.xhtml?ref=toc#_tab_stops
当然,固定宽度的字体,例如 Courier 或 Menlo 也可以解决这个问题,但它们的对比相当鲜明。
【讨论】:
非常好。谢谢。所以对于我的终结器,我使用的是“\t。”,但与 firstLineHeadIndent (20) 相比,我对 tabStop (40) 的位置感到困惑。我假设小数点应该出现在 40 的位置,并且字符串中的 \t 需要“制表符”到 tabStop,但是 20 有什么作用? 很抱歉造成混淆,firstLineHeadIndent (20) 在这个例子中没有做任何事情,所以我将其删除。小数点将向右缩进 40 点,无论有无。 我想我已经缩小了我的问题范围。上面的代码非常适合我的 UILabel,但前提是位置设置为 27 或更低。当我将其设置为 28 或更高时,文本向右移动大约 8 个点(猜测)并且左对齐。有任何想法吗?请注意,UILabel 位于我的故事板中定义的 UITableViewCell 中,我已将其设置为“普通”和“属性”,结果相同。 我怀疑您的整数部分(小数点左侧)的宽度超过 27 点。如果您的文本已经过了制表位,我相信它会忽略它,就像在文本编辑器中一样(但我不是这方面的专家)。确保制表位位置大于小数点左侧最宽的文本。 我结束了使用 Menlo 字体作为计时器而不是 tabStops。它看起来足够好,更容易保持居中(例如双秒与个位数秒),而且我不必担心 iPad 的自动布局和尺寸等级!以上是关于倒计时期间iOS UILabel中的小数点对齐?的主要内容,如果未能解决你的问题,请参考以下文章
iOS自动布局:将UILabel的左边缘与容器中的水平中心对齐?