2013-08-31 2 views
1

Я хочу, чтобы метка ниже (в желтом) была как минимум двумя строками, а одна.UILabel not drawing multiline

problem

Я удостоверился, чтобы снять Use Autolayout в Interface Builder. Когда я устанавливаю numberOfLines от 0 до 2, я получаю два слова, уложенных друг на друга, с желтым фоном, плотно подгоняющим слова. Результат тот же, независимо от того, является ли lineBreakModeNSLineBreakByWordWrapping или NSLineBreakByTruncatingTail. Это тоже то же самое, если я устанавливаю фрейм терминов «Ярлык», используя результат sizeWithAttributes или нет, и это то же самое, если я использую sizeToFit или нет. Я также попытался сделать ярлык UILabel, а не подклассом UILabel, который является TTTAttributedLabel, но результат тот же.

_termsLabel.font = [UIFont systemFontOfSize:12]; 
_termsLabel.textColor = [UIColor grayColor]; 
_termsLabel.textAlignment = NSTextAlignmentCenter; 
_termsLabel.lineBreakMode = NSLineBreakByWordWrapping; 
_termsLabel.numberOfLines = 0; 
_termsLabel.delegate = self; 
_termsLabel.backgroundColor = [UIColor yellowColor]; 

// Terms label 
NSString *termsText = [NSString stringWithFormat:@"%@ %@ %@ %@", NSLocalizedString(@"TermsIAgree", nil), 
                   NSLocalizedString(@"SettingsTOS", nil), 
                   NSLocalizedString(@"LocalizedAnd", nil), 
                   NSLocalizedString(@"SettingsPrivacyPolicy", nil)]; 

_termsLabel.text = termsText; 
_termsLabel.linkAttributes = @{ (__bridge NSString *)kCTUnderlineStyleAttributeName : [NSNumber numberWithBool:YES]}; 
CGSize termsSize = [_termsLabel.text sizeWithAttributes: @{ NSFontAttributeName : _termsLabel.font}]; 
_termsLabel.frame = CGRectMake(65, 
           395, 
           termsSize.width, termsSize.height); 

[_termsLabel addLinkToURL:[NSURL URLWithString:TOS_URL] withRange:[termsText rangeOfString:NSLocalizedString(@"SettingsTOS", nil)]]; 
[_termsLabel addLinkToURL:[NSURL URLWithString:PRIVACY_POLICY_URL] withRange:[termsText rangeOfString:NSLocalizedString(@"SettingsPrivacyPolicy", nil)]]; 

EDIT: Находя термины размер текста, используя CGSize termsSize = [_termsLabel.text sizeWithFont:_termsLabel.font forWidth:200 lineBreakMode:NSLineBreakByWordWrapping]; все же height из termsSize затем 14, в результате чего только в одной строке:

enter image description here

Как я могу получить второе линия? РЕШЕНИЕ На этом этапе просто добавьте [_termsLabel sizeToFit].

+0

ли размер 'termsSize' соответствует размеру этикетки? Или кадр меняется в какой-то момент? –

+0

См. Мое редактирование. , , –

ответ

2

Если у вас есть статический текст, просто установите режим прерывания на обертку, установите линии на нужный номер и отрегулируйте рамку метки в построителе интерфейса, пока она не обернется так, как вам нравится. Из вас есть динамический текст, вы можете использовать sizeToFit после установки текста лейбла, чтобы он автоматически настроить его высоту, чтобы соответствовать заданной ширины:

  1. Набор кадров макс желаемой ширины
  2. Установить строки 0
  3. режим перерыва
  4. Набор завернуть
  5. Вызов sizeToFit
1

Определите максимальную ширину своей метки и попробуйте метод sizeWithFont:forWidth:lineBreakMode: с этим значением и желаемым NSLineBreakMode, чтобы получить размер ограничивающей рамки результирующей строки.

+0

Спасибо, см. Мое редактирование. –