2015-07-04 19 views
6

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

  1. 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; 
    } 
    
  2. Das flackernde fast weggeht, wenn masksToBounds Eigenschaft false ist. Ich bin mir nicht sicher, warum dies der Fall ist oder ob dies der beabsichtigte Weg ist.

  3. 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.

+0

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

Antwort

0

Ich hatte das gleiche Problem für eine Weile. Ich habe lange darüber nachgedacht, wie ich mit diesem Problem umgehen kann und habe nie etwas Nützliches gefunden.Ich kam zum Schluss, dass niemand bemerkte und wer auch immer bemerkt kümmerte über appswitch Tabelle der 0.6f Linie. Aber ich habe einen kleinen Workaround gefunden, wenn du das noch nennst. Neben der Verwendung UITableViewCellSeparatorStyleNone tun Sie auch [self.tableView setSeparatorColor:[UIColor myColor]] und das letzte, was Sie tun können, wenn Sie eine Lücke zwischen Zellen wie facebook ios App haben können, dann stellen Sie die Hintergrundfarbe auf eine graue Farbe.

1

hinzufügen

Renders with edge antialiasing: YES 

In Ihrer App plist