Я нашел ту же проблему, но я нашел обходной путь. К вашему сведению, я поднял ошибку с Apple (идентификатор ошибки # 7535066). Lex, в вашем примере, если вы используете cell.font вместо textLabel.font, он должен работать, хотя вы получите предупреждение компилятора, поскольку это устаревший вызов метода. Я не уверен, что вы сможете увидеть детали ошибки, которую я поднял, поэтому я вставляю детали здесь:
iPhone SDK 3.1.2 (7D11) NSString UIKit Метод сложений sizeWithFont возвращает nil
РЕЗЮМЕ
Я украшаю UITableViewCells в методе делегата UITableView:
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
Я хочу найти длину текста уже в ячейке, чтобы правильно отформатировать новое представление, поэтому я вызываю метод NSString UIKit Additions:
- (CGSize) sizeWithFont: (UIFont *) шрифт constrainedToSize: (CGSize) размер
Когда я использую cell.textLabel.font для аргумента шрифта, он всегда возвращает пустой CGSize
Если я использую метод DEPRECATED, cell.font для аргумента, он возвращает значение CGSize, как и ожидалось.
ШАГИ ДЛЯ ВОСПРОИЗВОДСТВА
1. Создайте UITableViewController с TableView и заполните его некоторыми примерами данных.
2. В заглушенном методе cellForRowAtIndexPath после комментария // Установите ячейку и укажите, где заполняется cell.textLabel.text, укажите следующее:
CGSize size = [cell.textLabel.text sizeWithFont:[[cell textLabel] font] constrainedToSize:CGSizeMake(320, 480)];
NSLog(@"cell frame: %f %f", size.width, size.height);
CGSize size2 = [cell.textLabel.text sizeWithFont:[cell font] constrainedToSize:CGSizeMake(320, 480)];
NSLog(@"DEPRECATED cell frame: %f %f", size2.width, size2.height);
ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ
Во всяком случае, вы ожидаете, что вызов, использующий метод Устаревший, для извлечения шрифта, сбой или, по крайней мере, оба для возврата того же результата.
АКТУАЛЬНЫЙ РЕЗУЛЬТАТ:
2010-01-12 22: 06: 36.645 PrefTest [9659: 207] фрейм ячейки: 0,000000 0,000000
2010-01-12 22: 06: 36.646 PrefTest [9659: 207] УСТАРЕВШИЙ кадр ячейки: 88.000000 24.000000
ВРЕМЕННОЕ РЕШЕНИЕ И ИЗОЛЯЦИЯ:
Как уже отмечалось, используйте устаревший метод, чтобы получить шрифт. Но это становится незнакомым!
Поменяйте местами два приведенных выше метода:
CGSize size2 = [cell.textLabel.text sizeWithFont:[cell font] constrainedToSize:CGSizeMake(320, 480)];
NSLog(@"DEPRECATED cell frame: %f %f", size2.width, size2.height);
CGSize size = [cell.textLabel.text sizeWithFont:[[cell textLabel] font] constrainedToSize:CGSizeMake(320, 480)];
NSLog(@"cell frame: %f %f", size.width, size.height);
Результаты теперь:
2010-01-12 22: 06: 36.645 PrefTest [9659: 207] фрейм ячейки: 88.000000 24.000000
2010-01-12 22: 06: 36.646 PrefTest [9659: 207] УСТАРЕВШИЙ кадр ячейки: 88.000000 24.000000
Кажется, что простой ссылки на [шрифт ячейки] достаточно, чтобы заставить [[text textLabel] шрифт] работать правильно.