2012-05-08 73 views
2

我用下面的代碼在IOS添加文本有困難文本換行

//Set up label frame 
UILabel *tempLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 10, 210, 80)]; 
self.answer_text_label = tempLabel; 
[tempLabel release];  
[self.preview_answer_container addSubview:self.answer_text_label]; 

//Populate label with text 
self.answer_text_label.text = self.answer.text; 
self.answer_text_label.numberOfLines = 4; 
self.answer_text_label.lineBreakMode = UILineBreakModeWordWrap; 
[self.answer_text_label sizeToFit]; 

但是,結果我得到的是這樣的文字似乎溢出到右邊的框架內保持,而不是規定在我的標籤設置 'CGRectMake(100,10,210,80)'

enter image description here

如果我更改爲self.answer_text_label.numberOfLines = 0的包裝工作。但是這對我來說不起作用,因爲我需要在我規定的標籤框架內限制文本。

任何方式我可以包裝文本,並保持只有4行?

編輯:

嘗試使用推薦的代碼

self.answer_text_label.text = self.answer.text; 
[self.answer_text_label sizeToFit]; 
CGRect labelRect = self.answer_text_label.frame; 
labelRect.origin.y = CGRectGetMaxY(labelRect); 
labelRect.size = self.answer_text_label.frame.size; 
self.answer_text_label.frame = labelRect; 

結果如下。似乎沒有解決我的問題

enter image description here

+0

如果你明確地設置了行數,那麼你需要自己照顧標籤高度,那麼只有它會被正確包裝。 – rishi

+0

但是當我設置我的標籤框架時,我確實將標籤高度設置爲80。這不夠嗎? – Zhen

+0

而且我也明確地設置了標籤的寬度(210) – Zhen

回答

2

嘗試明確設置框架 -

[self.answer_text_label sizeToFit]; 
CGRect labelRect = self.answer_text_label.frame; 
labelRect.origin.y = CGRectGetMaxY(labelRect); 
labelRect.size = self.answer_text_label.frame.size; 
self.answer_text_label.frame = labelRect; 

編輯 - 不需要用這個,只要使用以下 - 刪除這些代碼僅低於使用,沒有其他屬性的框架,刪除sizeToFit以及 -

self.answer_text_label.numberOfLines = 4; 
self.answer_text_label.lineBreakMode = UILineBreakModeWordWrap; 

垂直對齊 - (使用上面的代碼行,使用此還有,也不要使用大小以適合)

CGSize textSize = [self.answer_text_label.text sizeWithFont:self.answer_text_label.font 
           constrainedToSize:CGSizeMake(self.answer_text_label.frame.size.width, MAXFLOAT) 
            lineBreakMode:self.answer_text_label.lineBreakMode]; 
self.answer_text_label.frame = CGRectMake(20.0f, 20.0f, textSize.width, textSize.height); 
+0

嗯,我仍然遇到同樣的問題。看到我更新的問題 – Zhen

+0

@ Zhen - 這次我試過在我的機器上,這個工程,只是試着讓我知道它是否也適用於你。 – rishi

+0

問題是,如果文本少於4行,標籤將不會垂直對齊頂部,而是停留在我的容器中間。這就是我使用sizeToFit的原因。因此,它停留在頂部 – Zhen

0

在iOS 6中和後,用NSLineBreakByWordWrapping,不UILineBreakModeWordWrap。

self.answer_text_label.lineBreakMode = NSLineBreakByWordWrapping;