Как правильно использовать 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?"
"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."
3 ответа
Вы не можете зависеть от NSString, используя тот же алгоритм размещения глифов, что и CoreText. При определении размера NIAttributedLabel рекомендуется использовать метки sizeToFit
а также sizeThatFits:
методы, потому что они используют CoreText для определения идеального размера метки.
NimbusKit 1.0 предоставляет новый метод для вычисления высоты NIAttributedLabel: NISizeOfAttributedStringConstrainedToSize()
Раньше я использовал sizeWithFont: и сталкивался с той же проблемой, что и вы. Теперь новый метод работал для меня отлично (у меня нет изображений на моем ярлыке)
Пожалуйста, проверьте строку @"T\nT\nT", она будет печатать только @"T\nT\n". Кажется, _textFrame показывает только две видимые строки вместо трех.