PS: Ich kann ein kleines Video posten, aber es scheint unnötig.UITableView Separator flackert während App-Umschaltung
Erstellen Sie ein Beispielprojekt mit Xcode 6.4 (derzeit 6E35b
). Erstellen Sie eine einfache UITableViewController-Unterklasse, und rendern Sie sie entweder mit einem Storyboard oder programmgesteuert.
Versuchen Sie App-Switching. Es scheint, dass das Tabellenansichts-Trennzeichen flackert, wenn die App in den Hintergrund oder Vordergrund wechselt. Es flickr nicht beim Scrollen etc.
es besser zu sehen, zu verwenden:
self.tableView.backgroundColor = [UIColor whiteColor];
self.tableView.rowHeight = 75.0f
self.tableView.separatorColor = self.view.tintColor;
Ich bin nicht sicher, warum dies geschieht. Ich habe auf iPhone 6/6 Plus: UITableView separator flickering and different thickness verwiesen, aber die Standardprojekte haben immer eine Startbildschirm-IB-Datei.
Sie können das Problem in der Standardeinstellungen App auf iOS sehen. In den meisten Fällen wird dies nicht zum Problem, es sei denn, Sie rendern Bilder und plötzlich die weißen Trennlinien flickr.
EDIT 1: Das größte Problem für mich ist, dass selbst wenn ich benutze:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
der Separator einen Moment gemacht wird und dann verschwindet; genau so wie in anderen Fällen. Siehe EDIT 2 für weitere Details.
EDIT 2 (07/04/15, 8.46 PM): Ich möchte hier einige Beispiele geben. Das flackernde Verhalten, das ich beobachtete, war bei benutzerdefinierten Tabellenansichtszellen (d. H. Wo Sie die Freiheit haben, eigene Bildansichten mit benutzerdefinierten Eigenschaftseinstellungen usw. zu rendern), viel stärker ausgeprägt.
Eine andere Beobachtung ist, dass das spezifische Flackern Verhalten (d. H. In dem Fall, in dem separatorStyle == UITableViewCellSeparatorStyleNone
) nicht mit Nur-Text-Zellen bemerkbar ist. Es ist vor allem in Fällen bemerkbar, in denen Bilder in Tabellenansichtszellen gerendert werden. Hier
ist ein Beispiel für eine Tabellenansicht Zelle:
@interface BTableViewCell() @property (nonatomic, strong, readwrite) UIImageView *mainImageView; @end @implementation BTableViewCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { [self commonInit]; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self commonInit]; } return self; } - (void)commonInit { // Initialize Avatar Image self.mainImageView = [[UIImageView alloc] init]; _mainImageView.translatesAutoresizingMaskIntoConstraints = NO; _mainImageView.layer.masksToBounds = YES; [self.contentView addSubview:_mainImageView]; [self configureConstraintsForImageView]; } - (void)configureConstraintsForImageView { [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_mainImageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeHeight multiplier:1 constant:0]]; [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_mainImageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]]; } @end - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { BTableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"]; NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpeg"]; UIImage* image = [UIImage imageWithContentsOfFile:imagePath]; cell.mainImageView.image = image; //ignore unoptimized load return cell; }
Das flackernde fast weggeht, wenn
masksToBounds
Eigenschaftfalse
ist. Ich bin mir nicht sicher, warum dies der Fall ist oder ob dies der beabsichtigte Weg ist.Verwenden Sie anstelle einer benutzerdefinierten Tabellenansichtszelle die Standardklasse
UITableViewCell
.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"]; NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpeg"]; UIImage* image = [UIImage imageWithContentsOfFile:imagePath]; cell.backgroundView = [[UIImageView alloc] initWithImage:image]; return cell; }
Es ist zu bemerken wert, dass das Flimmern Verhalten für # 2 und # 3 mehr oder weniger das gleiche ist. Es ist viel subtiler im Vergleich zu dem in # 1, aber immer noch spürbar.
ich dieses Problem nicht gründlich noch untersucht, aber die flackernden Effekte in Separatoren waren sehr erinnert an einem Problem, das ich mit dem UISegmentedControl begegnet. Vielleicht hilft dir diese SO-Konversation: http://stackoverflow.com/questions/18894772/uisegementredcontrol-in-ios-7-divider-image-is-wrong-during-animation/20654744#20654744 – Lobsterman