【问题标题】:Calculating line breaks every N characters?每N个字符计算换行符?
【发布时间】:2010-09-14 18:52:37
【问题描述】:

我正在为 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 找出中断的地方,我只是告诉它要使用多少行。

【问题讨论】:

    标签: iphone objective-c ios nsnumberformatter


    【解决方案1】:

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

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

    【讨论】:

    • 我实际上并没有实现换行符,我只是在设置textLabel s "lines" 属性。
    • 啊,那是有道理的:)那你应该在你的问题中说... :p
    【解决方案2】:

    不确定你给出的这个复杂的解决方案是否是个玩笑:-)

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

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

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

    【讨论】:

    • 问题是我不知道我的标题会有多长,也不知道要用多少行。我需要为每个标题即时计算。
    【解决方案3】:

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

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

    【讨论】:

    • 对,但是如果我将它设置为 2,那么如果它超过 2 行,我将丢失文本。我试图弄清楚将numberOfLines 设置为什么。
    猜你喜欢
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2016-01-26
    • 2012-10-20
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多