2012-01-28 3 views
0

Я пытаюсь добавить пользовательскую нижнюю границу ко всем ячейкам таблицы, используя UIImageView, который я добавляю в ячейку программно во время выполнения. Проблема в том, что часто, когда пользователь прокручивает, граница будет случайно удаляться.Динамическое добавление границы в UITableViewCell

Этот код находится в моем методе cellForRowAtIndexPath:

UIImageView* border = (UIImageView*)[cell viewWithTag:10]; 
if (border) 
    [border removeFromSuperview]; 

NSInteger sectionRows = [tableView numberOfRowsInSection:[indexPath section]]; 
NSInteger row = indexPath.row; 

if (row != sectionRows - 1) { 
    UIImageView* border = [[UIImageView alloc] initWithImage:[[ImageManager sharedManager] imageNamed:@"dashed_border"]]; 
    [border setFrame:CGRectMake(10, [self tableView:tableView heightForRowAtIndexPath:indexPath], 290, 1)]; 
    [border setTag:10]; 
    [cell addSubview:border]; 
    [border release]; 
} 

Он снимает границы подвид, если она существует, и если строка не является нижней строке, он вставляет границу в нижней части строки.

Я не уверен, что это условие гонки, или если есть определенные моменты, когда cellForRowAtIndexPath не вызывается как пользовательские свитки.

+0

Имеет ли количество строк в этой секции? – smparkes

+0

И что бы вы ни делали, вам лучше не удалять границу и повторно добавлять ее, что кажется наиболее распространенным случаем. Вместо этого удалите его, только если он есть, и вы - последняя строка. Обычно что-то такое же простое, как это было бы неважно, но в ячейках табличного представления вы не хотите делать какую-либо работу, в которой вам не нужно. – smparkes

+0

Нет, количество строк задается в соответствии с количеством элементов в коллекции. – James

ответ

1

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

Это происходит потому, что вы добавляете границу за пределы ячейки. Попробуйте переместить 1px вверх. Нравится:

[border setFrame:CGRectMake(10, [self tableView:tableView heightForRowAtIndexPath:indexPath] - 1, 290, 1)]; 
Смежные вопросы