当 iOS 上的 NSTextTab 不提供该选项时,如何在 iOS 上获得小数制表位?

How can I get a Decimal Tab Stop on iOS when NSTextTab on iOS doesn't offer that option?

在为 OS X 开发时,您可以选择指定 DecimalTabStopType 以在一列数字的小数点处获得一个制表位。但是,此选项在 iOS 中不可用 - 是否有某种方法可以实现相同的效果?

只要稍加努力,您就可以在iOS上轻松实现同样的效果。首先,您添加一个 Right 制表位。然后,您在右侧添加一个 Left 制表位。 [看来 tabStop 数组是按其偏移量排序的,因此您不能使用完全相同的偏移量。]

let centerTab = NSTextTab(textAlignment: .Right, location: width - 100, options: [:])
let leftTab = NSTextTab(textAlignment: .Left, location: width - 100 + 0.001, options: [:])

如果您有计划编号 - 没有小数点 - 您将附加 "value\t" 的文本 - 该值与第一个制表位的左侧对齐,然后制表符会将您带到下一个制表符.如果你有一个带小数点的字符串,将字符串分成两部分,然后将字符串 "firstPart" + "\t + "." "secondPart".

let nString: String
if case let array = item.value.componentsSeparatedByString(".") where array.count == 2 {
   nString = array[0] + "\t." + array[1]
} else {
   nString = item.value + "\t"
}
// append nString

您还可以使用它来对齐数字,其中一些是数值,而另一些则带有尾随百分号(使用类似技术)。

目前内置了对十进制制表位的支持,请参阅 https://developer.apple.com/documentation/uikit/nstexttab/1535107-columnterminators

可以如下使用

let paragraphStyle = NSMutableParagraphStyle()
let terms = NSTextTab.columnTerminators(for: NSLocale.current)
let tabStop0 = NSTextTab(textAlignment: .right, location: 100, options: 
[NSTabColumnTerminatorsAttributeName:terms])