Проблемы с переносом текста

Я использую следующий код для добавления текста в 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)».

введите здесь описание изображения

Обертка работает, если я перехожу на 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;

результат следующим образом. Похоже не решил мою проблему

введите здесь описание изображения


person Zhen    schedule 08.05.2012    source источник
comment
если вы явно устанавливаете количество строк, вам нужно позаботиться о высоте метки самостоятельно, тогда только она будет правильно обернута.   -  person rishi    schedule 08.05.2012
comment
Но я установил высоту метки равной 80, когда настраиваю рамку метки. Разве этого недостаточно?   -  person Zhen    schedule 08.05.2012
comment
а также я явно установил ширину метки (210)   -  person Zhen    schedule 08.05.2012
comment
проверить ответ и посмотреть, работает ли он для вас?   -  person rishi    schedule 08.05.2012


Ответы (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);
person rishi    schedule 08.05.2012
comment
Хм, я все еще получаю ту же проблему. Смотрите мой обновленный вопрос - person Zhen; 08.05.2012
comment
@Zhen - на этот раз я попробовал на своей машине, и это работает, просто попробуйте и дайте мне знать, сработает ли это и у вас. - person rishi; 08.05.2012
comment
Проблема в том, что если текст меньше 4 строк, метка не будет вертикально выровнена по верху, а останется в середине моего контейнера. Именно поэтому я использовал sizeToFit. Так что он остается на вершине - person Zhen; 08.05.2012
comment
Замечательно. Ваше последнее решение работает! Большое спасибо. Мне просто нужно было изменить высоту ограничения на высоту моего исходного кадра метки ответа. - person Zhen; 09.05.2012

В iOS 6 и более поздних версиях используйте NSLineBreakByWordWrapping, а не UILineBreakModeWordWrap.

self.answer_text_label.lineBreakMode = NSLineBreakByWordWrapping;
person Aniruddha    schedule 05.08.2014