Как правильно использовать NSString sizeWithFont constratinedToSize с NIAttributedLabel

Я рассмотрел то, что чувствует каждый пост об этом методе на SO. И многие ответы на постеры должны просто поставить действительно большое значение как ограничение высоты.

Однако для меня это не работает. Это мой код:

//Create the contentLabel Label
    CGSize size = [contentText sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14] constrainedToSize:CGSizeMake(286, 9999) lineBreakMode:UILineBreakModeWordWrap];

    //Create the content label with its position 7 pixels below the title 
    contentLabel = [[NIAttributedLabel alloc] initWithFrame:
                   CGRectMake(7, titleContainerView.frame.origin.y + 7, 286, size.height)];

    //Set the provided text and the font
    contentLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
    contentLabel.numberOfLines = 0;
    contentLabel.lineBreakMode = UILineBreakModeWordWrap;
    contentLabel.text = contentText;

я используюNIAttributedLabelдумал, что это не должно иметь никакого эффекта, потому что метод, возвращающий то, что я считаю неправильным размером, является частьюNSString,

Я прочитал в документации Apple, что метод иногда будет обрезать строку, хотя я думал, что для этого было ограничение по большой высоте

РЕДАКТИРОВАТЬ: я обнаружил, что это проблема с NIAttributedLabel, Если я использую обычный UILabel, он работает отлично. Вот две исходные строки и соответствующие скриншоты, первый демонстрирует мою проблему, а другой решил, что все будет в порядке:

"Buying a Mobile\nHello - I'd like a Motorola Defy with a Smartphone 60 Plan.\nBroadband Problem\nMy Broadband’s out. I've tested the router and cables and ruled out my equipment. Is there a problem at your end?"

Снимок экрана 1

"Buying a Mobile\nI\'m Mrs Sina Manu-Harris. My account number is 156205169. I\'m going overseas in 6 months time on the 2nd of September and I\'d like to get organized in advance and buy a new mobile phone.\nBroadband Problem\nGood afternoon. It’s Mrs Sina Manu-Harris here. My account number is 156205169. My Broadband isn’t working. I’ve checked my network and phone cables and I've also checked my filters."

Снимок экрана 2

3 ответа

Решение

Вы не можете зависеть от NSString, используя тот же алгоритм размещения глифов, что и CoreText. При определении размера NIAttributedLabel рекомендуется использовать метки sizeToFit а также sizeThatFits: методы, потому что они используют CoreText для определения идеального размера метки.

NimbusKit 1.0 предоставляет новый метод для вычисления высоты NIAttributedLabel: NISizeOfAttributedStringConstrainedToSize()

Раньше я использовал sizeWithFont: и сталкивался с той же проблемой, что и вы. Теперь новый метод работал для меня отлично (у меня нет изображений на моем ярлыке)

Пожалуйста, проверьте строку @"T\nT\nT", она будет печатать только @"T\nT\n". Кажется, _textFrame показывает только две видимые строки вместо трех.

Другие вопросы по тегам