web-dev-qa-db-fra.com

Faire en sorte que UILabel produise des points de suspension plutôt que de réduire la police

Lorsque je modifie dynamiquement le texte d'un UILabel, je préfère obtenir des points de suspension (point, point, point) plutôt que de redimensionner automatiquement le texte. Comment est-que quelqu'un peut faire ça?

En d'autres termes, si j'ai UILabel avec le mot Cat avec la police de taille 14 et que je change le mot en Hippopotamus la police se rétrécit pour s'adapter à tout le Word. Je préférerais que le mot soit automatiquement tronqué suivi d'un point de suspension.

Je suppose qu'il existe un paramètre qui peut être modifié dans mon objet UILabel. Je préfère ne pas le faire par programme.

29
Eric Brotto

Définissez les propriétés suivantes:

label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByTruncatingTail;

Vous pouvez également définir ces propriétés dans le générateur d'interface.

83
jbat100

Solution rapide:

label.lineBreakMode = .ByTruncatingTail

Swift 3:

label.lineBreakMode = .byTruncatingTail
11
dijipiji

J'ai rencontré un problème lors de la production d'Ellipsis après avoir créé un UILabel et j'ai dû utiliser UILabel.attributedText au lieu de UILabel.text. Il existe un mode de saut de ligne sur le style de paragraphe qui remplacera le UILabel.lineBreakMode lors de l'utilisation du texte attribué. Vous devrez définir lineBreakMode sur .byTruncatingTail sur le style de paragraphe de la chaîne attribuée si vous souhaitez obtenir des points de suspension.

par exemple.

    let attributedString = NSMutableAttributedString(string: "example long string", attributes: [...])
    let textRange = NSRange(location: 0, length: textString.length)
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineBreakMode = .byTruncatingTail
    textString.addAttribute(.paragraphStyle, value: paragraphStyle, range: textRange)
    uiLabel.attributedText = attributedString
2
jake.lange