Использование dequeueReusableCellWithIdentifier заставляет изображения, используемые в качестве повторяющегося фона, вытекать из ячейки - PullRequest
0 голосов
/ 14 января 2012

Я пытаюсь использовать 3 изображения в качестве фона для ячейки.верхнее изображение, среднее (повторяющееся изображение) и нижнее изображение.Если я использую dequeueReusableCellWithIdentifier, то он работает нормально, однако, как только я начинаю прокручивать таблицу, изображения не остаются внутри ячейки.

См. Прикрепленное изображение.

http://theutherfish.co.uk/iosss.png

Это проблемный код

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellidentifier"];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellidentifier"];
}

Это прекрасно работает, но я предполагаю, что это боров памяти.

UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:CGRectZero];

Каков наилучший способ получитьлучшее из обоих миров?то есть он работает и не требует большого объема памяти.

ОБНОВЛЕНИЕ полная ячейка для строки в функции пути индекса

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellidentifier"];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellidentifier"];
}

UIImageView *img1 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 0.0, 310.0, 8.0)];
img1.image = [UIImage imageNamed:@"top.png"];

UIImageView *img2 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, 8.0, 310.0, [PullRefreshTableViewController heightForExpandingCell:text])];
img2.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"middle.png"]];

UIImageView *img3 = [[UIImageView alloc] initWithFrame:CGRectMake(5.0, [PullRefreshTableViewController heightForExpandingCell:text] + 8.0, 310.0, 8.0)];
img3.image = [UIImage imageNamed:@"tempbottom.png"];

[[cell contentView] addSubview:img1];
[[cell contentView] addSubview:img2];
[[cell contentView] addSubview:img3];

return cell;

1 Ответ

2 голосов
/ 14 января 2012

Я бы посоветовал использовать одно растягиваемое изображение в качестве фона ячейки и добавлять его в одном изображении (с соответствующими масками изменения размера) только при создании ячейки (т. Е. Когда ячейка == ноль).

Затем вы корректируете высоту в методе heightForRowAtIndexPath.

В данный момент вы добавляете виды изображений каждый раз, когда ячейка используется повторно, так что в итоге вы получаете десятки из них в каждой ячейке, и все они имеют разную высоту, поэтому это выглядит беспорядочно.

Если растягиваемое изображение не работает для вас, вам следует заняться созданием изображений только один раз, как указано выше, и просто настроить кадры при повторном использовании ячейки.

В качестве альтернативы, так как ваше изображение выглядит как не более чем серые закругленные углы, посмотрите в свойствах borderWidth, borderColor, borderRadius в CALayer.

...