7

Я работаю над проектом iOS 5 с раскадными стенами и, таким образом, используя динамические прототипы ячеек таблицы в IB. В одном из представлений у меня есть табличный вид с ячейками переменной высоты, с высотой ячейки, вычисленной с высоты содержимого.Разделители UITableView неправильно рисуются путем повторного использования соты?

tableView:heightForRowAtIndexPath: возвращает правильные значения для всех ячеек, когда сначала отображается представление таблицы. Все хорошо, когда прокручивается несколько элементов, но тогда что-то идет не так: фактические ячейки кажутся правильной высотой, включая их области касания, но их разделители отображаются в неправильных местах (внутри ячеек, а не между ними).

Из измерения размещения разделителя, похоже, что использование этой ячейки может иметь какое-то отношение. Сепараторы для первых трех ячеек отображаются правильно, но не четвертый. heightForRowAtIndexPath: возвращает правильную высоту для него (125 пикселей в этом случае), а содержащиеся в нем подсмотры находятся в правильном месте. Тем не менее, разделитель отображается только на 108 пикселей от предыдущего разделителя, помещая его в область с высоким разрешением 125 пикселей ячейки.

Вот кикер: 108px - это высота первой ячейки таблицы, теперь из поля зрения и, вероятно, повторно используется. У меня нет определенных доказательств этого, но, похоже, что табличное представление игнорирует heightForRowAtIndexPath: для этих ячеек и просто выводит разделитель в соответствии с высотой повторной ячейки.

Это не объясняет, почему куча более поздних, более коротких ячеек не является разделителем. Но это все, что я должен продолжать.

Есть ли обходной путь, настройка IB или что-то еще, что может помочь?

+0

Я сдался. Я закончил отключать разделители от свойств вида таблицы и добавил 1px высокий вид в нижней части прототипа ячейки, чтобы действовать как разделитель. Теперь это по крайней мере выглядит хорошо. Я все равно хотел бы знать, почему это неправильно, так что ответы по-прежнему приветствуются. –

+0

Просто с этой проблемой с табличным представлением переменной высоты тоже ... и я делаю все это программно. Ну, по крайней мере, мне не нужны строки, но это все еще запутывает:/ – cclogg

+0

Просто подтверждая одно, вы используете разделители tableView или добавляете строку/UIView в качестве разделителя? –

ответ

1

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

в initWith *** метод класса пользовательских ячейки таблицы: рамка

separator = [CALayer layer]; 
separator.backgroundColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor; 
[self.layer addSublayer:separator]; 

обновление сепаратора в методе layoutSubviews:

- (void)layoutSubviews { 
    CGFloat height = 1.0f; 
    separator.frame = CGRectMake(0.0f, self.frame.size.height - height, self.frame.size.width, height); 
    [super layoutSubviews]; 
} 
+0

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

22

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

Оказалось, проблема была в том, что я был главным layoutSubviews, но забыли позвонить по номеру [super layoutSubviews]. Добавление этого звонка устранило проблему для меня.

+0

Это решило мою проблему. Благодаря! – OlivaresF

+0

тот же здесь, спасибо! – Ken

+0

Ты спас мой день! Благодаря ! – Phil