Decimal point alignment in iOS UILabel during countdown?

一笑奈何 提交于 2019-12-20 04:23:40

问题


Sorry I don't have any code yet, but would appreciate some advice!

I have a countdown timer showing seconds with one decimal point in a UILabel (10.0, 9.9, 9.8, etc.). It works fine, but the decimal point moves around slightly depending on the size decimal value. Is there a way to align the text in the UILabel to the decimal point or should I create two labels (one for the seconds value aligned right and one for the decimal value aligned left)?

Thanks!


回答1:


I think your suggestion of multiple labels is perfectly valid. Here is an attributed string solution (for m:ss but it should work with floating point numbers also):

    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

Related resources:

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

Of course a fixed width font, such as Courier or Menlo could also solve this problem, but they contrast fairly starkly.



来源:https://stackoverflow.com/questions/32994463/decimal-point-alignment-in-ios-uilabel-during-countdown

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!