Линии разделителя UITableView исчезают между ячейками при прокрутке - PullRequest
5 голосов
/ 08 октября 2009

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

Подробности: У меня есть UITableView, к которому я добавляю стандартные UITableViewCells. Эти ячейки создаются с помощью initWithFrame, высота кадра = 90 пикселей. Я добавляю пользовательское представление, созданное из кончика к виду этой ячейки, высота = 90 пикселей. Высота ячейки указана в 90px в tableView: heightForRowAtIndexPath:.

Кто-нибудь испытывал такое поведение?

Ответы [ 4 ]

6 голосов
/ 08 октября 2009

У меня было ощущение, что решение будет простым ... Я сделал высоту своих ячеек 91px, и разделительные линии выглядят так, как они должны отображаться при прокрутке.

3 голосов
/ 29 мая 2012

У меня была такая же проблема, но я использовал другое решение. Мои разделители исчезали, потому что я очищал свою камеру, используя:

for (UIView *eachView in self.subviews) {
    [eachView removeFromSuperview];
}

Это также исключило разделитель!

Вместо этого я назначил тег для каждого из моих таможенных видов (три метки) непосредственно перед добавлением их в дополнительный вид:

tempFirstNameLabel.tag = 100;
self.firstNameLabel = tempFirstNameLabel;
[self addSubview:self.firstNameLabel];

Затем, когда я очистил ячейку, я просто удалил эти представления:

for (int i = 100; i<103; i++) {
    UIView *eachView = [self viewWithTag:i];
    [eachView removeFromSuperview];
}

Надеюсь, это поможет! Это также позволяет избежать проблем управления памятью, которые ставит решение @Douglas Smith.

3 голосов
/ 14 января 2011

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

НО, мне удалось обойти проблему, используя прозрачный разделитель и добавив свой собственный в contentView ячейки, следующим образом:

yourTable.separatorColor = [UIColor clearColor];
separatorView.frame = FactRectMake(0, rowHeight-1, appFrame.size.width, 0.2);
1 голос
/ 24 апреля 2014

Вы должны установить разделитель none, а затем снова одну строку

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // it is a bug in iOS 7
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
...