2012-05-08 1 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 строки?

EDIT:

Попробуйте Предложенное код

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; 

EDIT - Не нужно использовать это, просто используйте следующий - удалить их кода просто использовать ниже , никакое другое свойство кадра, не удалить 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;