Предисловие: это довольно абстрактный вопрос.cellForRowAtIndexPath видит ячейку как разную высоту при ее загрузке, а затем перезагружается?
У меня есть несколько ячеек в UITableView
, которые используют другое изображение в зависимости от высоты ячейки (с шагом 50 пикселей, от 50 пикселей до 1000 пикселей в высоту). Я сталкиваюсь с какой-то странной проблемой, когда при первом загрузке приложения cellForRowAtIndexPath
сообщает, что первые три ячейки (независимо от того, являются ли все три включенными) имеют высоту 100 пикселей, тогда, когда я прокручиваю вниз и снова создаю резервную копию, их высота вернется к правильному значению. На экране нет изменения высоты экрана, только изменения, используемые изображения, и значение cell.frame.size.height
в моих NSLog
операциях.
Я вхожу в систему heightForRowAtIndexPath
и cellForRowAtIndexPath
, и я могу проверить правильность высот, когда они покидают heightForRowAtIndexPath
. Но при вводе cellForRowAtIndexPath
эти первые три высоты установлены равномерно на 100. Затем я прокручиваю вниз до тех пор, пока эти три ячейки не будут отображаться на экране, затем прокрутите назад, а значениеизменится на правильное значение.
Итак, мои вопросы:
Есть ли код называется между самим концом heightForRowAtIndexPath
и в самом начале cellForRowAtIndexPath
, что можно было бы меняющимся значение этих первых нескольких ячеек cell.frame.size.height
?
Почему эта проблема возникает только в первых трех ячейках? И почему бы им вернуться после перезагрузки через мгновение? Я думал, что причиной повторного использования может быть идентификатор повторного использования, но они по-прежнему назначают этот идентификатор при первой загрузке, так что это не имеет значения, не так ли?
EDIT: Я думаю, что 100px высота исходит от высоты строки ячейки прототипа в моей раскадровки, как если бы я изменить это на 101px, эти первые три клетки затем первоначально в 101px.
EDIT: Вот код, я использую, чтобы установить изображение, хотя эта часть работает, он только что получил неверное значение для работы с:
UIImage *cappedBG;
float cellHeight = cell.contentView.frame.size.height;
if (cellHeight <= 51) {
cappedBG = [[UIImage imageNamed: @"bg50.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else if (cellHeight <= 101) {
cappedBG = [[UIImage imageNamed: @"bg100.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else if (cellHeight <= 151) {
cappedBG = [[UIImage imageNamed: @"bg150.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else if (cellHeight <= 201) {
cappedBG = [[UIImage imageNamed: @"bg200.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
} else {
cappedBG = [[UIImage imageNamed: @"bg250.png"] resizableImageWithCapInsets: UIEdgeInsetsMake(25, 25, 25, 25) resizingMode: UIImageResizingModeStretch];
}
Похоже, это получилось. Дайте несколько минут, чтобы проверить, и я буду отмечать это правильно. – Luke
вы гений ..! – ViruMax