计算每N个字符的换行符?

时间:2010-09-14 18:52:37

标签: iphone objective-c ios nsnumberformatter

我正在为iPhone和iPod Touch制作RSS解析器,我需要能够为每篇文章设置每个单元格中显示的行数。我想要打破每39个字符,这是我使用的字体大小的最合适的字符。

我想取一个字符串中的字符数,然后除以每行的字符数。我希望有一个整数作为答案,在必要时进行四舍五入。

这是我到目前为止所拥有的。有什么问题?

NSNumber *lines = [[NSNumber alloc] initWithInteger:[cell.textLabel.text length]/kLineLength];

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

    [formatter setRoundingMode:NSNumberFormatterRoundUp];
    [formatter setRoundingIncrement:[[[NSNumber alloc]initWithInteger:1]autorelease]];

    NSNumber *roundedLines = [[NSNumber alloc]initWithInteger: [[formatter numberFromString:[lines stringValue]]integerValue]];

    [cell.textLabel setNumberOfLines:[roundedLines integerValue]];

    [roundedLines release];
    [formatter release];
    [lines release];

修改

我不是在断线之后知道要给标签多少行。所以,虽然我有效地设置了换行符,但我并没有真正这样做。我让iOS弄清楚要去哪里,我只告诉它要使用多少行。

3 个答案:

答案 0 :(得分:1)

不要自己这样做。让UILabelUITextViewUIWebView为您执行此操作。每个字母都有不同的宽度。为每个N字符插入换行符没有任何意义。

我的意思是,排版是一项复杂的艺术,自古腾堡时代以来已经培育了数百年。我自己也不敢这样做。将其留给专家(即API实施者)。

答案 1 :(得分:0)

我不确定你到底想要完成什么,但你可能无法使用cell.textLabel并且必须使用自定义UITableViewCell ..

如果设置了cell.textLabel.numberOfLines = 2,那么UILabel对象也会在必要时自动生成换行符。

答案 2 :(得分:0)

不确定你提供的这个复杂的解决方案是否是一个笑话: - )

int numberOfCharacters = ....;
int kLineLength = 39;

int lines = (numberOfCharacters + kLineLength - 1) / kLineLength;

不需要任何格式化程序等。

编辑:你可能会对固定的线宽感到失望,因为自动换行会(应该!)使你的线条更短。