UITableView separator seltsames Verhalten
Habe ich in einem einfachen Stil Tabelle, mit mehreren Abschnitten.
Symptome: wenn die Tabelle zum ersten mal geladen wird, wird jede Zelle hat separator als normal, außer der letzten Zelle in jedem Abschnitt (also "vor" der header). Allerdings, wenn es scrollen, auf einige Zellen, die der separator erscheint. Auch, wenn eine Zelle ausgewählt ist, dann deaktiviert das Trennzeichen angezeigt wird.
Druck der view-Hierarchie zeigt, dass auf sauberen start, der separator Blick auf die Letzte Zelle in jedem Abschnitt ausgeblendet ist, so dass ich annehmen würde, dass wäre das normale Verhalten:
<_UITableViewCellSeparatorView: 0x145b1990;
frame = (0 47.5; 320 0.5);
hidden = YES;
layer = <CALayer: 0x145b2950>>
Zum scrollen manchmal; und indem Sie in die Zelle; diese hidden-Eigenschaft wird entfernt und so das Trennzeichen angezeigt wird.
Erste Annahme war, dass ich etwas falsch machen; aber dies geschieht mit den meisten basic-Anwendung "hello world" zu:
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView reloadData];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 4;
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return 2;
}
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section {
return @"test";
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *reuseIdentifier = @"TestCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:reuseIdentifier];
return cell;
}
Bildschirme (Links: nach dem start; rechts: nach der Auswahl einer Zelle):
Ist das ein Fehler auf der Apple Seite, oder bin ich etwas fehlt? Zum Beispiel auch in die iOS-Kontakte-Anwendung der separator ist nie versteckt über einem Abschnitt header...
** * Update: **
War in der Lage reproduzieren diese in der stock Musik app: z.B. Lieder tab, keine spearator. Wählen Sie deaktivieren Sie dann die erste Zelle von jedem Abschnitt; Trennzeichen erscheint.
Extra info: iOS 7.1
- Wie hast du das ausblenden der Separatoren?
- Ich nicht; die Tabelle wird mit Trennzeichen versteckt in die letzten Zellen in jedem Abschnitt.
- Hmm, ich habe sicherlich noch nicht gesehen, dieses Verhalten. Ist es möglich für Sie, um uns zu zeigen, ein Beispiel-Projekt demonstriert dies? Legen Sie es in GitHub oder Dropbox?
- Ich habe gerade herausgefunden, dass ich es reproduzieren kann, diese in der stock Musik app. Lieder tab, I Blättern Sie zu einem Abschnitt header (z.B. Brief, E -). Kein Trennzeichen vor der Abschnittsüberschrift. Ich habe lange drücken Sie auf die erste Zelle, die in Abschnitt E lange genug, um markiert, schieben Sie dann aus, um die Auswahl aufzuheben. Separator erscheint oben in Abschnitt E. iOS 7.1
- Ah, ich sehe, was du jetzt meinst. Es kann sein, ein Apple-bug. Versuchen Sie, melden Sie es in den radar dann.
- Ich hatte Angst zu hören, dass... trotzdem Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da dieses eine iOS 7.1-bug, als workaround würde ich vorschlagen, verstecken Sie die built-in separator und zeigt einen eigenen an der Unterseite jeder Zelle.
Ausblenden der built-in separator:
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
Zeigt ein benutzerdefiniertes Trennzeichen:
In meinem Fall war es die
Clip To Bounds
auf der custom UITableViewCell. Versehentlich deaktiviert es aus dem storyboard. Dann wiederClip To Bounds
zutrue
dieses Problem zu beheben.true
es wird schneiden Sie die Untersicht, wenn es mehr als die übergeordnete Ansicht.Als es tritt auf iOS 7 ab, ich schlage vor, folgende knifflige Schritte, die funktioniert gut, um dieses Szenario zu vermeiden.
Verstecken tableView-Standard-Zelle als separator :
Hinzufügen, benutzerdefinierte Ansicht, um Ihre benutzerdefinierten Zelle als :
Ich hatte dieses Problem in einer etwas anderen situation, aber, meine Zellen sind im Bearbeiten-Modus, aber es sollte keine Rolle spielen. In meinem Fall wollte ich nicht den Boden
_UITableViewCellSeparatorView
zeigt nach der Auswahl einer Zelle, so nach einem Blick durch die subviews der ZelleNSLog(@"%@", [cell.subviews[0] subviews]);
ich gesehenwas es leichter machte, Sie zu finden und loszuwerden, die lästigen separator Ansichten durch die Nutzung dieser
Für einige Grund, warum ich don ' T haben ein Problem mit der top-separator Sicht, wahrscheinlich weil mein Kopf in jedem Abschnitt hat eine dunkle hintergrund-Farbe, verbirgt sich der separator anzeigen, aber wenn Sie wollte, Sie zu vertuschen, könnten Sie wahrscheinlich fügen Sie diesen code
Beachten Sie, dass ich diesen code in meine
didHighlightRowAtIndexPath
delegieren. Darüber hinaus, meine ZellenselectionStyle
auf default eingestellt ist. Hoffe, dies hilft jemand da draußen!