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

时间:2013-12-20 12:36:45

标签: ios objective-c nsstring pdf-generation

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

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

除非字符串的第一个字符是新行(\ n)字符,否则一切都很好。例如:

[@"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没有问题。它可以毫无问题地进行尺寸估算。

2 个答案:

答案 0 :(得分:1)

我已经开始使用iOS7编译应用程序,问题不再发生了。因此,必须由于以下配置而发生:

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

答案 1 :(得分:0)

如果您使用文本编码两个字符: \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:方法,将矩形作为参数。