2016-04-14 2 views
0

Я должен интегрировать UITableViewCell генерируется программно из кода следующим образом:UITableViewCell смешанных xibs и программно сгенерированных UITableViewCells

UITableViewCell *newCell = [[UITableViewCell alloc] initWithFrame: CGRectMake(0,0, screenWidth, 150]; 

Однако остальные ячейки в этом виде таблицы генерируются с xibs, которые полагаются на autolayout, и поэтому исходный программист использовал только метод estimatedHeightForRow, а не heightForRow.

Моя программно генерируется представление таблицы клетка все испортила (по оценкам высоты по умолчанию 64, а не высота фрейма 150), если я не осуществлять heightForRow тогда как существующие клетки неудачные, как только я осуществить heightForRow в дополнении к estimatedHeightForRow , Есть ли способ обойти эту загадку?

Спасибо за любой совет.

ответ

0

Я бы поставил оператор if в вашем выражении для метода row и установил высоты в соответствующую ячейку. Было бы проще, если бы я мог видеть код.

1

Во-первых, вы должны использовать назначенный инициализатор UITableViewCell - initWithStyle: reuseIdentifier: вместо initWithFrame UIView :. Тем не менее, я не думаю, что это причина вашей проблемы, поскольку я протестировал initWithFrame: и по умолчанию он по умолчанию имеет стиль по умолчанию и не использует идентификатор повторного использования.

Вы не сказали, что делаете с ячейкой, как только вы ее создаете. Используете ли вы макет по умолчанию или добавляете собственные пользовательские представления? Макет по умолчанию (с помощью только строки текста), по-видимому, работает правильно в моем тестировании, при этом размер ячеек зависит от количества текста в textLabel.

Если вы добавляете пользовательские представления, вам необходимо убедиться, что contentView имеет вертикальные ограничения, которые полностью определяют его высоту. Например, если у вас есть два UILabels по вертикали, вам понадобятся вертикальные ограничения, такие как @ "V: | -10- [label1] [label2] -10- |". Если ограничения не определены полностью, то contentView будет сбрасываться до нуля, и ваши представления будут отображаться с перекрытием следующей ячейки.

Чтобы получить немного больше деталей, при использовании ящиков для калибровки UITableView не смотрит на кадр возвращенной ячейки, а скорее вызывает систему ячейкиLayoutSizeFittingSize: withHorizontalFittingPriority: verticalFittingPriority :. Это приводит к тому, что механизм Auto Layout анализирует ограничения ячейки для вычисления соответствующего размера макета. UITableView затем устанавливает кадр ячейки в соответствии с этим размером и своим положением в таблице.