如果第一个字符是换行符 (),则 NSString drawInRect 将绘制空白



我刚刚注意到这种行为。我正在使用以下调用绘制 PDF:

[string drawInRect:renderingRect
              withFont:font
         lineBreakMode:NSLineBreakByWordWrapping
             alignment:alignment];

一切都很好,除了字符串的第一个字符是换行符 () 字符。例如:

[@"Hello hello" drawInRect:renderingRect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:alignment]; // Draws "Hello hello"
[@"nHello hello" drawInRect:renderingRect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:alignment]; // Draws nothing

我错过了什么吗?对我来说,如果第一个字符是新行,该方法不会打印任何内容,这对我来说似乎有点奇怪。

此外,当第一个字符是换行符时,(CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode没有问题。它毫无问题地进行大小估计。

我已经开始使用 iOS7 编译应用程序,但问题不再发生。因此,它一定是由于以下配置而发生的:

  • 使用 iOS6 构建应用
  • 使用 iOS7 设备运行应用。

如果使用文本编码这两个字符: n 将被绘制,但我相信您想换行。试试这段代码,它对我有用:

NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica" size:22], NSFontAttributeName,[NSColor blackColor], NSForegroundColorAttributeName, nil];
NSAttributedString *text=[[NSAttributedString alloc] initWithString:@"Hello hello" attributes: attr];
NSSize attrSize = [text size];
[text drawAtPoint:NSMakePoint(X, Y)];

我认为您可以将drawAtPoint:方法替换为一些将矩形作为参数的方法。

最新更新