2012-06-08 3 views
6

У меня есть проблема с участием UILabel «s sizeToFit метода:UILabel размера, чтобы соответствовать

UILabel *questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,320,320)]; 
questionLabel.lineBreakMode = UILineBreakModeWordWrap; 
questionLabel.backgroundColor=[UIColor clearColor]; 
questionLabel.textAlignment=UITextAlignmentLeft; 
questionLabel.textColor=[UIColor blackColor]; 
questionLabel.tag=1; 
questionLabel.font=[UIFont systemFontOfSize:13]; 
questionLabel.numberOfLines = 0; 
[questionLabel sizeToFit]; 
[myView addSubview:questionLabel]; 

Я написал этот код для отображения моих данные. Но если я пишу: [questionLabel sizeToFit] мои данные не отображаются должным образом. Если я удалю [questionLabel sizeToFit], он отобразится, но отобразит только половину данных.

Спасибо и с уважением.

+0

Почему вы устанавливаете количество строк как статически? Вместо этого вы можете рассчитать ширину или высоту или оба размера шрифта, инициализируя CGRectZero. – Tarun

+0

благодарит за сообщение. можете ли вы четко сформулировать вышеуказанное предложение? – fayaz

+1

Ну, я знаю, что опаздываю, но, возможно, это помогает: «sizeToFit» не работает с «UILabel» с несколькими строками. Вы можете использовать 'UITextView' для этого, но вы должны быть уверены, что размер текстового вида больше, чем необходимо. Например: установите высоту представления = 'MAXFLOAT', а затем вызовите 'sizeToFit'. Если вы хотите сохранить метку, вам нужно использовать способ 'sizeWithFont: constrainedToSize: lineBreakMode:'. Надеюсь это поможет. Ура! – George

ответ

-1

просто убедитесь, что вы увеличиваете количество строк этикетки. Вместо

questionLable.numberOfLines = 0; Воспользоваться

questionLable.numberOfLines = 4; Как это заставит систему вычислить наименьшую ширину возможного для 4-х строк.

Вы можете добиться этого с помощью файла XIb тоже ..

+0

Проблема в том, что я не могу видеть данные. если я пишу [questionLable sizeToFit] – fayaz

16
NSString *yourString = @"write your label text here"; 
CGSize s = [yourString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; 
questionLabel.frame = CGRectMake(0, 0, s.width, s.height); 

Проверьте, если это помогает.

+0

Это больше не работает в ios 8, так как этот метод устарел – chandhooguy

+0

Используйте NSLineBreakByWordWrapping вместо UILineBreakModeWordWrap, который устарел! :) – MasterRazer

+0

sizeWithFont: теперь устарел - так это уже не правильно – AppHandwerker

0

i googled d above problem и наткнулся на некоторую информацию о том, что sizeToFit кажется ошибкой, и об этом сообщается уже на apple. Так как обходной путь и может использовать этот код:

NSString * myText = [NSString stringWithString:@"some text"]; 

CGFloat constrainedSize = 265.0f; 

UIFont * myFont = [UIFont fontWithName:@"Arial" size:19]; 

CGSize textSize = [myText sizeWithFont: myFont 
         constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX) 
          lineBreakMode:UILineBreakModeWordWrap]; 



CGRect labelFrame = CGRectMake (0, 0, textSize.width, textSize.height); 

UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; 

[label setFont:myFont]; 

[label setText:myText]; 
+0

Спасибо, что удержали усилия, но все та же проблема возникает – fayaz

2

Я думаю, что лучше использовать Таус-iDeveloper ответ вычислить размер этикетки.
Я просто хочу сказать, что причина, по которой ваш код не работает, заключается в том, что вы не установили текст в свой UILabel, поэтому sizeToFit возвращает CGSizeZero (поэтому он не отображается на экране). Вы должны установить текст перед использованием sizeToFit.

2

Я обнаружил, что если AutoLayout на то, чтобы соответствовать размеру не работать

+0

thats great, его работа – Vishal

0

Я обнаружил, что при использовании sizeToFit с UILabel, в InterfaceBuilder вам нужно изменить свойство автосокращения от «Fixed Font Size» на ' Минимальный размер шрифта. Обычно я устанавливаю его значение в 0.5, чтобы убедиться, что он работает правильно.

Смежные вопросы