Я только что столкнулся со странной проблемой, у меня есть пользовательская ячейка таблицы с динамической высотой. Во время тестирования все это, казалось, работало нормально, но теперь, когда я загружаю в него реальный контент, кажутся некоторые проблемы.
Похоже, что некоторый текст не запускает новую строку в UILabel
Правильно: http://dl.dropbox.com/u/274185/Screen%20Shot%202012-05-09%20at%201.15.21%20PM.png Неверно: http://dl.dropbox.com/u/274185/Screen%20Shot%202012-05-09%20at%201.15.30%20PM.png
Как вы можете видеть в неправильном примере, текст выталкивается на вторую строку, но высота метки по-прежнему составляет только одну строку.
item.project = @Другой тестовый проект с более длинным заголовком (Администрирование/Управление проектами);
item.project = @Test Project (Администрирование/Управление проектами);
Как я вычисляю высоту, так:
// when creating the cell
cell.projectLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.projectLabel.numberOfLines = 0;
[cell.projectLabel sizeToFit];
// in heightForRowAtIndexPath()
CGSize projectHeight = [item.project sizeWithFont:[UIFont boldSystemFontOfSize:13.0f] constrainedToSize:CGSizeMake(320.0f, CGFLOAT_MAX) lineBreakMode: UILineBreakModeWordWrap];
Я попытался изменить lineBreakMode, но это, похоже, не очень помогает.
РЕДАКТИРОВАТЬ: возникла проблема при расчете высоты текста, я использовал фиксированные 320 точек, что неверно, после использования фактической ширины высота была рассчитана правильно.
CGSize projectHeight = [item.project sizeWithFont:[UIFont boldSystemFontOfSize:13.0f] constrainedToSize:CGSizeMake(cell.projectLabel.bounds.size.width, CGFLOAT_MAX) lineBreakMode: UILineBreakModeWordWrap];