J'ai un UITableView, dans lequel chaque ligne affiche une date et une heure plus un message (capture d'écran ci-dessous). J'utilise une seule chaîne attribuée pour afficher le texte dans la ligne (ce qui est nécessaire pour la différence de couleur). Comme je ne veux pas mettre à zéro le mois, le jour ou l'heure, la date sur le côté gauche des deux points est de longueur variable, ce qui provoque une désorganisation de la liste des messages.Formatage d'une date à largeur fixe sans remplissage nul
Le résultat que je souhaite est que tous les deux-points soient alignés verticalement, de sorte que les messages s'alignent, malgré le nombre de caractères dans la date étant variable. Quelle est la meilleure façon d'accomplir cela? J'ai essayé essentiellement le remplissage de l'espace (en détectant la longueur du mois, du jour et de l'heure), mais le résultat ne s'aligne toujours pas parfaitement et peut donner lieu à de longs blocs (d'apparence moche) quand tous les trois (mois, date et heure) doivent être complétés. Peut-être existe-t-il un moyen de répartir cet espace supplémentaire entre tous les personnages de manière égale?
Date de mise en forme:
//choose format for the date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "M/d h:mma: "
dateFormatter.amSymbol = "am"
dateFormatter.pmSymbol = "pm"
Entrer dans la vue:
//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
Résultat:
Prendre 2 étiquettes, sera plus facile. –
Je vous suggère fortement d'utiliser AAAA-MM-JJ pour la date (oui, rempli de zéro). C'est la norme ISO, et si votre application a des utilisateurs internationaux, ils l'apprécieront. Vous avez deux autres options que vous voudrez peut-être envisager ... une police de longueur fixe alignera tout si vous remplissez zéro. Deuxièmement, placez la date et l'heure sur sa propre ligne. Ajoutez le commentaire sur la ligne suivante en dessous. – Tony