У меня есть 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
Результат:
Возьмите 2 этикетки, будет проще. –
Я бы настоятельно рекомендовал использовать YYYY-MM-DD для даты (да, нулевой). Это стандарт ISO, и если у вашего приложения есть международные пользователи, они оценят его. У вас есть еще два варианта, которые вы можете рассмотреть ... шрифт фиксированной длины выровняет все, если вы заполняете нуль. Во-вторых, поместите дату и время на свою линию. Добавьте комментарий ниже следующей строки. – Tony