如何自动换文字?

时间:2009-06-08 21:39:21

标签: iphone cocoa cocoa-touch

在Cocoa中,NSAttributedString上有一个方法(lineBreakBeforeIndex:withinRange:),可以在一段文本中找到合适的换行符。

由于iPhone上不存在NSAttributedString,是否有人对类似功能有任何建议?

编辑:意识到我真的在寻找一个自动换行算法。例如,我希望文本包含80个字符;我在哪里放置换行符,以便单词不会分成两行?

编辑:一个例子可能会有所帮助。说我有以下几行:
这是第1行,甚至可能不会有80个字符长 这是另一行,不同的文字更长但不是很多。

我想把它变成类似的东西:
这是第1行,可能是 甚至不会是80个字符
长。
这是另一条线 不同的文字是 更长但不是很多。

编辑:我希望将此文本放在UITextView中,以便进行额外的编辑(非常类似于带有电子邮件的引用回复)

4 个答案:

答案 0 :(得分:1)

取决于你需要它,你可以在UILabel中换行文本(例如,如果你在UITableViewCell中做多行文本)。

请参阅:

http://www.doubleencore.com/blog/2009/01/18/iphone-dev-tip-using-uilabels-numberoflines-adjustsfontsizetowidth/

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html#//apple_ref/occ/instm/UILabel/textRectForBounds:limitedToNumberOfLines:

http://blog.sallarp.com/iphone-uilabel-multiline-dynamic-height/

此方法指定文本需要适合的大小(矩形) - 可能您可以更新它以使用您的字体计算大小为80个字符,然后创建该大小的矩形然后适合其中的文本。

答案 1 :(得分:0)

NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br />"];

这将找到所有换行符并将其替换为“
”标签。只需根据自己的需要进行编辑。 :)

答案 2 :(得分:0)

关于自动换行算法已有一个问题:Best word wrap algorithm?

答案 3 :(得分:0)

它没有直接回答OP的问题,但是当搜索让我回答这个问题时,我正在寻找这个问题:

Sizing a UILabel to fit?

特别是来自BadPirate的答案:

@interface UILabel (BPExtensions)
- (void)sizeToFitFixedWidth:(CGFloat)fixedWidth;
@end

@implementation UILabel (BPExtensions)


- (void)sizeToFitFixedWidth:(CGFloat)fixedWidth
{
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, fixedWidth, 0);
    self.lineBreakMode = UILineBreakModeWordWrap;
    self.numberOfLines = 0;
    [self sizeToFit];
}
@end

然后让标签具有可变的多线高度,但只有一个固定的宽度:

[myLabel sizeToFitFixedWidth:kSomeFixedWidth];