web-dev-qa-db-fra.com

aligner le texte à l'aide de drawInRect: withAttributes:

Dans la version iOS 5 de mon application, j'avais:

[self.text drawInRect: stringRect
             withFont: [UIFont fontWithName: @"Courier" size: kCellFontSize]
        lineBreakMode: NSLineBreakByTruncatingTail
            alignment: NSTextAlignmentRight];

Je mets à niveau pour iOS 7. La méthode ci-dessus est déconseillée. J'utilise maintenant drawInRect: withAttributes:. Le paramètre attributs est un objet NSDictionary. Je peux obtenir drawInRect: withAttributes: pour travailler avec l'ancien paramètre font en utilisant ceci:

      UIFont *font = [UIFont fontWithName: @"Courier" size: kCellFontSize];

      NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: font, NSFontAttributeName,
                                  nil];

      [self.text drawInRect: stringRect
             withAttributes: dictionary];

Quelles paires de valeurs-clés dois-je ajouter à dictionnaire pour obtenir NSLineBreakByTruncatingTail et NSTextAlignmentRight?

46

Il existe une clé pour définir le style de paragraphe du texte (y compris le mode de saut de ligne, l'alignement du texte, etc.).

De docs :

NSParagraphStyleAttributeName

La valeur de cet attribut est un objet NSParagraphStyle. Utilisez cet attribut pour appliquer plusieurs attributs à une plage de texte. Si vous ne spécifiez pas cet attribut, la chaîne utilise les attributs de paragraphe par défaut, tels que renvoyés par la méthode defaultParagraphStyle de NSParagraphStyle.

Vous pouvez donc essayer ce qui suit:

UIFont *font = [UIFont fontWithName:@"Courier" size:kCellFontSize];

/// Make a copy of the default paragraph style
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
/// Set line break mode
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
/// Set text alignment
paragraphStyle.alignment = NSTextAlignmentRight;

NSDictionary *attributes = @{ NSFontAttributeName: font,
                    NSParagraphStyleAttributeName: paragraphStyle };

[text drawInRect:rect withAttributes:attributes];
140
Hejazi

Le code va dans ce sens:

CGRect textRect = CGRectMake(x, y, length-x, maxFontSize);
UIFont *font = [UIFont fontWithName:@"Courier" size:maxFontSize];
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;


   paragraphStyle.alignment = NSTextAlignmentRight;
    NSDictionary *attributes = @{ NSFontAttributeName: font,
                                  NSParagraphStyleAttributeName: paragraphStyle,
                                  NSForegroundColorAttributeName: [UIColor whiteColor]};
[text drawInRect:textRect withAttributes:attributes];
5