查看 NSString drawInRect 将使用多少行的简单方法?

Posted

技术标签:

【中文标题】查看 NSString drawInRect 将使用多少行的简单方法?【英文标题】:Simple way to see how many lines NSString drawInRect will use? 【发布时间】:2012-10-24 22:02:34 【问题描述】:

一直在四处寻找,但无法在这里找到答案:

有没有一种简单的方法来计算/查看使用 NSString 的 drawInRect 方法(在子类 UIView 的 drawRect 方法中)将产生多少行文本。

例如在下面的sn-p中:

    [self.text drawInRect:titleRect withFont:[UIFont systemFontOfSize:15.] lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter];

我将如何计算此处将产生多少行文本?

谢谢!

【问题讨论】:

【参考方案1】:

使用NSString sizeWithFont:constrainedToSize:lineBreakMode: 方法确定大小。您传入的 CGSize 应该具有所需的宽度和非常高的高度值。

【讨论】:

我同意这个答案。我会首先计算一行占用的空间(例如在 word 上使用),然后你就有了一行文本的高度。然后取整个文本块的总高度,除以你刚刚计算的单行,你应该得到行数。 感谢@runmad,您的评论完成了我正在寻找的答案。 rmaddy 您的解决方案是一个开始,但没有提供行数的整数值。谢谢,两位。【参考方案2】:

我最终得到了一些自定义计算,因为 sizeWithFont 无法正确使用自定义字体。一些粗略但有效的方法:

NSString *text = post.content;
int cntLB = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] count];
int numLines = [text length]/38+cntLB/2;

其中 38 es 某个阈值参数取决于文本的 with 和 cntLB/2 指的是双 \r\n 字符。

【讨论】:

-1 这是一个可怕的问题解决方案!并非每个字符都以相同的宽度呈现,并且还有其他因素(例如换行模式)会影响文本的呈现方式。 您的答案可能适用于非常特殊的情况,但不适用于大多数情况。如果文本没有换行符但仍需要换行怎么办? rmaddy,JustSid,这两种情况都有。我知道它一点也不优雅,但是默认的 sizeWithFont 不适用于应有的自定义字体(例如,使用 Myriad Pro 试试)然后你就知道了。我并不是说这是一个通用的解决方案,只是一些可以节省数小时头部撞击的自定义方法。

以上是关于查看 NSString drawInRect 将使用多少行的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

instanceRespondToSelector 在不应该返回 true 时返回

drawInRect: withAttributes 文本垂直居中或放置一些填充

drawInRect:失去图像分辨率的质量

– drawInRect:withAttributes: 设置 UIFont 时崩溃

具有相同图像的慢速drawInRect

在drawInRect中绘制渐变层