DrawRect文本对齐中的NSString

时间:2012-07-15 06:02:01

标签: objective-c xcode macos cocoa

我使用DrawRect方法绘制一些文本,但无法弄清楚如何将此文本对齐到右边。

我知道在界面构建器中你可以指定对齐方式,所以我知道它是可能的,我似乎无法弄明白自己。

此时的任何帮助都非常有帮助。

非常感谢!

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"AvenirNext-UltraLight" size:12], NSFontAttributeName, [NSColor redColor], NSForegroundColorAttributeName, nil];
    NSAttributedString * newEmail = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%d", newUnreadEmail] attributes:attributes];
    [newEmail drawAtPoint:NSMakePoint(140, 600)];

2 个答案:

答案 0 :(得分:3)

你需要做数学来计算正确对齐的正确点。使用[newEmail size]计算属性字符串的宽度,从要绘制的矩形的宽度中减去它,并将差值添加到传递给{{1的点的左坐标方法。

答案 1 :(得分:2)

如果您使用的是NSString课程,那么您的生活将更加轻松,因为您可以使用以下方法UIStringDrawing类的NSString扩展名(您不需要这样做)使用NSString}这些方法的任何额外的事情:

- (CGSize)sizeWithFont:(UIFont *)font;
- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode;
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode;

它们会为您提供所选UIFontUILineBreakMode的当前字符串的确切大小,并使用该大小计算屏幕上的位置,以便始终对齐字符串的右边缘同样的立场。