【问题标题】:NSString drawInRect draws blank if first character is a new line character (\n)如果第一个字符是换行符(\n),则 NSString drawInRect 绘制空白
【发布时间】:2014-01-09 07:49:22
【问题描述】:

我刚刚注意到这种行为。我正在使用以下调用绘制 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 在第一个字符是换行符时也没有问题。它可以毫无问题地进行大小估计。

【问题讨论】:

  • 当我执行你的代码时,它并没有只绘制任何东西,我的意思是在没有 \n 的情况下执行一个代码之后?
  • @hussainShabbir 抱歉,我无法理解您的评论。
  • 我的意思是当我执行这个时 [@"Hello hello" drawInRect:renderingRect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:alignment]; // 绘制“Hello hello”它没有为我绘制任何东西。是完整的代码吗??
  • 你确定你的矩形足够大,可以容纳更多的一行吗?尝试手动创建矩形,确保高度很大,看看它是否有效。也许你应该在绘制之前对你的字符串进行编码。
  • @hussainShabbir 当然,这不是全部代码。还有创建 PDF 文档、开始页面和完成文档的部分。我省略了这些部分,因为它似乎不太相关。也许您可以尝试在 UIView 上绘图?

标签: ios objective-c nsstring pdf-generation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这里的编码部分在哪里?此外,您的字符串开头没有新行。
    • 我误解了你的问题,我以为你想打印 \n 字符,但我相信你想打印新行。您是否尝试过上面带有 \n 的代码?如果你把它放在字符串的中间,它工作正常吗?如果要编码,可以使用标准的苹果方法,例如: newString = [oldString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];但 id 对你的例子没有帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2020-04-10
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多