2013-08-07 12 views
7

. So habe ich Standardunterklasse von UITableViewController mit Tabellenansicht. Jetzt habe ich Inhalt Einsatz zuInhalt der Tabellenansicht, der bei der Verwendung von UIRefreshControl herunterfährt und die Einstellung contentInset

self.tableView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0); 

gesetzt Ich verwende UIRefreshControl auch in üblichen Weise.

self.refreshControl = [[CTRefreshControl alloc] init]; 
[self.refreshControl addTarget:self action:@selector(loadData:) forControlEvents:UIControlEventValueChanged]; 

alles funktioniert gut und reibungslos, wenn die Tabellenansicht enthält genügend Daten, die er scrollt (so Inhalt Größe Höhe ist mehr als die Höhe der Tabellenansicht). Wenn in der Tabelle nicht genügend Daten vorhanden sind (z. B. nur zwei Reihen), dann geht es beim Anfahren glatt und springt dann plötzlich um etwa 20 Punkte nach unten. Das Gleiche passiert, wenn ich in eine andere Richtung blättern. Es passiert nicht, wenn kein Refresh-Steuerelement vorhanden ist oder wenn ich contentInset nicht ändere. Irgendwelche Ideen? Alle auf iOS 6.

+0

Setzen Sie die Änderung von contentInset in einen Animationsblock mit einer Dauer von 0,2 Sekunden. – Fogmeister

+0

Warum ändern Sie den Inhaltseinschub der Tabellenansicht? Es könnte einen besseren Weg geben, dies zu tun, ohne den Inhalt zu verändern. – Fogmeister

+4

Ja, ich hatte auch das selbe Problem. Es ist eindeutig ein Fehler in iOS. Ich habe es bei Apple eingereicht und sie haben es bestätigt. – Accatyyc

Antwort

1

Sie müssen wie dies die Änderung der contentInset in einem Animationsblock setzen ...

[UIView animateWithDuration:0.2 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        self.tableView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0); 
       } 
       completion:nil]; 

(aus dem Gedächtnis typisierten, so dass Sie die Code-Vervollständigung überprüfen müssen können).

Dies sollte Ihr Problem beheben.

+0

Ich setze contentInset in viewDidLoad als Inhalt sollte immer 40 Pips niedriger bleiben (es sei denn, Sie scrollen), so dass dies keine Auswirkungen hat. – Michal

+0

Wenn Sie den Inhaltseinschub im Interface Builder anstelle von viewDidLoad festlegen, sollte der Inhaltseinsatz angewendet und UITableViewController diesen im Offset enthalten. –