将日期格式化为固定宽度而不进行零填充

时间:2016-12-14 07:29:51

标签: ios swift date formatting nsattributedstring

我有一个UITableView,其中每行显示日期和时间以及消息(下面的屏幕截图)。我正在使用单个属性字符串来显示行中的文本(这是色差所必需的)。

因为我不想对月,日或小时进行填零,所以冒号左侧的日期是可变长度,这会导致邮件列表看起来杂乱无章。

我想要的结果是所有冒号垂直排列,以便消息排成一行,尽管日期中的字符数是可变的。实现这一目标的最佳方法是什么?

我已经尝试过基本上空间填充(通过检测月,日和小时的长度),但结果仍然没有完美排列,并且可能导致长(丑陋)的空白块需要填充三个(月,日和小时)。也许有一种方法可以均匀地在所有角色中分配这个额外的空间?

日期格式:

//choose format for the date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "M/d h:mma: "
dateFormatter.amSymbol = "am"
dateFormatter.pmSymbol = "pm"

进入视图:

//first put in the date
let classHistoryCellText = NSMutableAttributedString.init(string: formattedDate)
classHistoryCellText.addAttribute(NSForegroundColorAttributeName, value: UIColor.init(hex: "#00000", alpha: 0.3), range: NSMakeRange(0, lengthOfDate))

//append what the message is
classHistoryCellText.append(NSMutableAttributedString.init(string: classBeingViewed.classHistory[indexPath.row]["event"] as! String))
classHistoryCellText.addAttribute(NSForegroundColorAttributeName, value: UIColor.init(hex: "#00000"), range: NSMakeRange(lengthOfDate, classHistoryCellText.length - lengthOfDate))

//bold the entire thing and make it size fontSize
classHistoryCellText.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: fontSize), range: NSMakeRange(0, classHistoryCellText.length))

classHistoryCellToDisplay.textLabel?.attributedText = classHistoryCellText

结果:

enter image description here

1 个答案:

答案 0 :(得分:0)

尝试将日期格式化程序更改为:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd hh:mma: " // this line is changed
dateFormatter.amSymbol = "am"
dateFormatter.pmSymbol = "pm"

它会使数月,日和时间总是有两位数,这将使所有日期的宽度相同。

除非您有特定要求以避免显示前导零,否则这将起作用。如果是这种情况,最简单的解决方案是使用两个标签 - 一个用于日期,一个用于状态。使日期标签固定宽度。