IOS 7 sizeWithFont устарел

Я не могу заменить устаревший sizeWithFont с boundingRecWithSize правильно. Я просмотрел все ответы и не спал всю ночь, пытаясь это исправить. Мне действительно нужна помощь кого-то, кто умнее меня. Вот код, который я пытаюсь изменить. Любая помощь будет оценена.

CGSize sizeForText = [faqItem.answer sizeWithFont:[UIFont boldSystemFontOfSize:14]
   constrainedToSize:CGSizeMake(self.tblView.bounds.size.width - padding, MAXFLOAT)
   lineBreakMode:NSLineBreakByWordWrapping];

[sectionInfo insertObject:[NSNumber numberWithFloat:roundf(sizeForText.height + 5)]
  inRowHeightsAtIndex:0];

3 ответа

Решение

В яблочной документации:

sizeWithFont: возвращает размер строки, если она должна быть отображена с указанным шрифтом в одной строке. (Устаревшее в iOS 7.0. Вместо этого используйте sizeWithAttributes:)

  • (CGSize) sizeWithFont: (UIFont *) шрифт Параметры шрифт Шрифт, используемый для вычисления размера строки. Возвращаемое значение Ширина и высота ограничительной рамки результирующей строки. Эти значения могут быть округлены до ближайшего целого числа.

Так что вы можете использовать sizeWithAttributes: вот так:

 CGSize sizeForText = [faqItem.answer sizeWithAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:14]}
                       constrainedToSize:CGSizeMake(self.tblView.bounds.size.width - padding, MAXFLOAT) 
                           lineBreakMode:NSLineBreakByWordWrapping];

[sectionInfo insertObject:[NSNumber numberWithFloat:roundf(sizeForText.height + 5)] 
      inRowHeightsAtIndex:0];

Вам необходимо использовать свойство sizeWithAttributes.

CGSize mysize = [string sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];

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

CGSize mysize = [string sizeWithAttributes:@{NSFontAttributeName: label1.font}];

Я не верю, что вы можете использовать constrainedToSize с этим свойством. Это должно быть отдельно установлено на CGRect.

Я написал образец для вас, надеюсь, это полезно.

NSString *text = @"    // Do any additional setup after loading the view, typically from a nib.";
CGRect rect = CGRectZero;
NSDictionary *attrDict = @{NSFontAttributeName : [UIFont systemFontOfSize:17]};

rect = [text boundingRectWithSize:CGSizeMake(100,9999)
                          options:(NSStringDrawingUsesLineFragmentOrigin)
                       attributes:attrDict
                          context:Nil];

UILabel *lbl = [[UILabel alloc] init];
lbl.text = text;
rect.origin = CGPointMake(50, 200);
lbl.frame = rect;
lbl.lineBreakMode = NSLineBreakByWordWrapping;
lbl.numberOfLines = 0;
[self.view addSubview:lbl];
lbl.backgroundColor = [UIColor lightGrayColor];
Другие вопросы по тегам