在Cocoa中,NSAttributedString上有一个方法(lineBreakBeforeIndex:withinRange:),可以在一段文本中找到合适的换行符。
由于iPhone上不存在NSAttributedString,是否有人对类似功能有任何建议?
编辑:意识到我真的在寻找一个自动换行算法。例如,我希望文本包含80个字符;我在哪里放置换行符,以便单词不会分成两行?
编辑:一个例子可能会有所帮助。说我有以下几行:
这是第1行,甚至可能不会有80个字符长
这是另一行,不同的文字更长但不是很多。
我想把它变成类似的东西:
这是第1行,可能是
甚至不会是80个字符
长。
这是另一条线
不同的文字是
更长但不是很多。
编辑:我希望将此文本放在UITextView中,以便进行额外的编辑(非常类似于带有电子邮件的引用回复)
答案 0 :(得分:1)
取决于你需要它,你可以在UILabel中换行文本(例如,如果你在UITableViewCell中做多行文本)。
请参阅:
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的问题,但是当搜索让我回答这个问题时,我正在寻找这个问题:
特别是来自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];