sizeWithFont:constractedToSize: устарел, но boundingRectWithSize у меня не работает
Итак, вот моя дилемма, у меня есть блок кода, который прекрасно работает, он устарел, но он вычисляет соответствующий размер высоты любого блока текста. (Ниже работает но не рекомендуется)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 && indexPath.row == 2) {
CGSize size = [[item desc] sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(290 - (10 * 2), 200000.0f)];
CGFloat height = MAX(size.height, 44.0f);
return height + (2 * 2);
}
return 44;
}
Пытался удалить устаревший код, поэтому я застрял на правильном способе исправить это в течение нескольких дней, и я придумал это.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 && indexPath.row == 2) {
NSStringDrawingContext *ctx = [NSStringDrawingContext new];
NSAttributedString *aString = [[NSAttributedString alloc] initWithString:[item desc]];
UITextView *calculationView = [[UITextView alloc] init];
[calculationView setAttributedText:aString];
CGRect textRect = [calculationView.text boundingRectWithSize:self.view.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:calculationView.font} context:ctx];
CGFloat height = MAX(textRect.size.height, 44.0f);
return height + (2 * 2);
}
return 44;
}
Это, конечно, не работает, это работает с точки зрения уровня кода, но оно не измеряет ячейку соответствующим образом. Я чувствую, что это должно быть легко любая помощь приветствуется.
2 ответа
Попробуй это:
CGRect textRect = [calculationView.text boundingRectWithSize:CGSizeMake(290 - (10 * 2), 200000.0f)
options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:calculationView.font} context:ctx];
Вы не предоставили необходимое ограничение размера, как вы указывали в устаревшем методе. Вот почему вы не получаете желаемый результат.
Просто отредактируйте метод heightForRow следующим образом:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 && indexPath.row == 2)
{
NSStringDrawingContext *ctx = [NSStringDrawingContext new];
NSAttributedString *aString = [[NSAttributedString alloc] initWithString:[item desc]];
UITextView *calculationView = [[UITextView alloc] init];
[calculationView setAttributedText:aString];
[calculationView sizeToFit];
//CGRect textRect = [calculationView.text boundingRectWithSize:self.view.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:calculationView.font} context:ctx];
CGFloat height = calculationView.frame.size.height; //MAX(textRect.size.height, 44.0f);
NSLog(@"%.2f", calculationView.frame.size.height);
return height + (2 * 2);
}
return 44;
}