2009-06-08 20 views
1

在Cocoa中,NSAttributedString上有一個方法(lineBreakBeforeIndex:withinRange:)在一段文本中找到合適的換行符。如何換行文字?

由於NSAttributedString在iPhone上不存在,是否有人對類似的功能有任何建議?

編輯:意識到我真的在尋找一個換行算法。例如,我希望文本可以包含80個字符;我應該在哪裏放置換行符,以便文字不會分成兩行?

編輯:一個例子可能會有所幫助。假設我有以下幾行:
這是第1行,可能不會超過80個字符。
下面是另一行不同的文字,但較長,但不是太多。

我想將其轉換成類似:
這裏是1號線,可能
甚至不會包含80個字符
長。
這是另一行
不同的文字是
更長但不是太多。

編輯:我希望這段文字放在一個UITextView讓更多的編輯可以製成(非常相似,郵件帶引號的回覆)

+0

您是否需要在一般情況下或者像UILabel這樣的特定文本中排列字符串? – stefanB 2009-06-09 05:31:32

+0

字符串本身將來自外部來源;它不會來自(或進入)UILabel。 – hjon 2009-06-09 16:03:30

回答

0

已經有一個關於自動換行算法的問題:Best word wrap algorithm?

+0

這個鏈接的問題與我所尋找的最接近,因爲我不僅需要用包裝顯示數據,而且需要用戶進一步編輯它。 – hjon 2009-06-20 23:39:36

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

這會找到你的所有換行符和替換它帶有「
」標籤。只需根據自己的需要進行編輯即可。 :)

+0

對不起,我沒有很好地解釋這個問題。希望我的編輯更清楚。 – hjon 2009-06-09 03:31:14

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個字符與您的字體,然後創建該大小的矩形,然後適合其中的文本。

0

它沒有直接回答這個問題,有機磷,但是這個前面回答的是一個我一直在尋找當搜索讓我對這個問題:

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];