Basierend auf @ Brian Vorschlag habe ich diesen Code:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat height = navigationBar.frame.size.height;
CGFloat y = scrollView.bounds.origin.y;
if (y <= 0) {
CGRect frame = navigationBar.frame;
frame.origin.y = 0;
navigationBar.frame = frame;
} else if (tableView.contentSize.height > tableView.frame.size.height) {
CGFloat diff = height - y;
CGRect frame = navigationBar.frame;
frame.origin.y = -y;
navigationBar.frame = frame;
CGFloat origin = 0;
CGFloat h = height; // height of the tableHeaderView
if (diff > 0) {
origin = diff;
h = y;
}
frame = tableView.frame;
frame.origin.y = origin;
frame.size.height = tableView.superview.frame.size.height - origin;
tableView.frame = frame;
CGRect f = CGRectMake(0, 0, tableView.frame.size.width, h);
UILabel* label = [[UILabel alloc] initWithFrame:f];
tableView.tableHeaderView = label;
[label release];
}
}
Mein Code einen UITableView hat aber soll mit jeder rollbaren Komponente arbeiten. Wenn Sie andere Komponenten als die navigationBar und die UIScrollView-Unterklasse haben, sollten Sie die Art ändern, wie die Höhe der scrollbaren Komponente berechnet wird. So etwas wie das:
Ich musste eine dumme tableHeaderView hinzufügen, um das gewünschte Verhalten zu haben. Das Problem war, dass, wenn scrollViewDidScroll: aufgerufen wird, der Inhalt einen Offset hat, aber der Apparience in Mobile Safari ist, dass der Inhalt nicht gescrollt wird, bis die navigationBar vollständig verschwindet. Ich habe versucht, zuerst die contentOffset.y auf 0 zu ändern, aber offensichtlich hat es nicht funktioniert, da der gesamte Code auf dem Scroll-Mechanismus beruht. Also habe ich gerade eine tableHeaderView hinzugefügt, deren Höhe genau der gescrollte Offset ist, also wird die Überschrift nie wirklich gesehen, und der Inhalt scheint nicht zu scrollen, bis die navigationBar vollständig verschwindet.
Wenn Sie die dumme tableHeaderView nicht hinzufügen, wird die bildlauffähige Komponente scheinbar hinter der navigationBar angezeigt.
Mit dem tableHeaderView ist das rollbare Komponente tatsächlich Scrolling (wie in der Bildlaufleiste zu sehen ist), aber da ein tableHeaderView deren Höhe es ist genau die gleiche, als der Offset gescrollt der rollbaren Inhalt erscheint nicht auf Scrollen werden, bis sie vollständig die navigationbar verschwindet:
ähnliche Probleme: http: // Stackoverflow.com/questions/21929220/show-hide-uitoolbar-match-finger-bewegung-genau-wie-für-beispiel-ios7-s Es ist extrem subtil, es GENAU wie Safari zu tun .... – Fattie