2009-10-08 7 views
5

Problem: Das Trennzeichen zwischen Zellen in einer Tabellenansicht wird nur für die Zellen angezeigt, die beim Laden der Ansicht angezeigt werden, und nur beim Laden. Wenn in der Tabellenansicht ein Bildlauf ausgeführt wird, zeigen die in die Ansicht gescrollten Zellen kein Trennzeichen zwischen ihnen an, und wenn die Tabellenansicht zurückgescrollt wird, zeigen die anfänglichen Zellen kein Trennzeichen.UITableView-Trennlinien verschwinden zwischen den Zellen beim Scrollen

Details: Ich habe eine UITableView, zu der ich Standard UITableViewCells hinzufüge. Diese Zellen werden mit initWithFrame, frame height = 90px, erstellt. Ich füge der Ansicht dieser Zelle eine benutzerdefinierte Ansicht hinzu, die aus einer Feder erstellt wurde: height = 90px. Die Zellenhöhe ist in tableView: heightForRowAtIndexPath: auf 90px angegeben.

Hat jemand dieses Verhalten erlebt?

Antwort

6

Ich hatte das Gefühl, die Lösung wäre einfach ... Ich habe die Höhe meiner Zellen 91px und die Trennlinien erscheinen, wie sie auf Scroll sollten.

3

Ich konnte die Lösung von Douglas nicht verwenden, weil meine Tabellen eine riesige Menge an Zellen haben und auf älteren Telefonen ziemlich unbrauchbar werden würden. Die Wiederverwendung von Zellen ist der Schlüssel für die Leistung.

ABER, gelang es mir, das Problem mit Hilfe einer transparenten Trenn zu umgehen und das Hinzufügen meiner eigenen in der content der Zelle wie folgt:

yourTable.separatorColor = [UIColor clearColor]; 
separatorView.frame = FactRectMake(0, rowHeight-1, appFrame.size.width, 0.2); 
3

ich hatte das gleiche Problem, aber ich habe eine andere Lösung. Meine Separatoren verschwinden, weil ich meine Zelle klare mit:

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

Diese den Separator Ansicht ebenfalls entfernt!

Stattdessen habe ich einen Tag für jedes meiner Zoll Ansichten zugeordnet (drei Etiketten) direkt vor ihnen auf die Unteransicht hinzu:

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

Dann, wenn ich die Zelle gelöscht, ich diese Ansichten nur entfernt:

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

Hoffe, das hilft! Dadurch werden auch die Speicherverwaltungsprobleme vermieden, die die Lösung von @ Douglas Smith verursacht hat.

1

Sie sollten Separator none gesetzt und dann einzelne Zeile wieder

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

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