Wie kann ich eine UIScrollView nach oben scrollen lassen?
ios
objective-c
iphone
uiscrollview
uikit
Jack Humphries
quelle
quelle
UIScrollView
contentInset
leider berücksichtigen .[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, -self.scrollView.contentInset.top) animated:YES];
macht den Job für mich[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:YES];
Es funktioniert in iOS 6 & 7[scrollView setContentOffset:CGPointMake(0, scrollView.contentSize.height-scrollView.frame.size.height) animated:YES];
Hier ist eine Swift-Erweiterung, die es einfach macht:
Verwendung:
quelle
iOS 11 und höher
versuche mit dem neuen zu arbeiten
adjustedContentInset
.Zum Beispiel (nach oben scrollen):
quelle
Für Swift 4
quelle
Verwenden
setContentOffset:animated:
quelle
Antwort für Swift 2.0 / 3.0 / 4.0 und iOS 7+:
quelle
In iOS7 hatte ich Probleme, eine bestimmte Bildlaufansicht nach oben zu bringen, was in iOS6 funktionierte, und habe damit die Bildlaufansicht so eingestellt, dass sie nach oben zeigt.
quelle
Swift 3.0.1 Version von Rob Mayoffs Antwort :
quelle
Um das scrollToTop-Verhalten der Statusleiste vollständig zu replizieren, müssen wir nicht nur das contentOffset festlegen, sondern auch sicherstellen, dass die scrollIndicators angezeigt werden. Andernfalls kann der Benutzer schnell verloren gehen.
Die einzige öffentliche Methode, um dies zu erreichen, ist
flashScrollIndicators
. Leider hat das einmalige Aufrufen nach dem Festlegen von contentOffset keine Auswirkung, da es sofort zurückgesetzt wird. Ich fand, dass es funktioniert, wenn ich jedes Mal den Blitz machescrollViewDidScroll:
.Implementieren Sie in Ihrem UIScrollViewDelegate (oder UITable / UICollectionViewDelegate) Folgendes:
Die Ausblendverzögerung ist etwas kürzer als das ScrollToTop-Verhalten in der Statusleiste, sieht aber trotzdem gut aus.
Beachten Sie, dass ich das Ansichtstag verwende, um den Status "isScrollingToTop" zu kommunizieren, da ich dies über Ansichtscontroller hinweg benötige. Wenn Sie Tags für etwas anderes verwenden, möchten Sie diese möglicherweise durch ein iVar oder eine Eigenschaft ersetzen.
quelle
Ich denke, ich habe eine Antwort, die sowohl mit iOS 11 als auch mit früheren Versionen (für vertikales Scrollen) vollständig kompatibel sein sollte.
Dies berücksichtigt das neue AdjustedContentInset und berücksichtigt auch den zusätzlichen Offset, der erforderlich ist, wenn PreferLargeTitles bevorzugt wird in der Navigationsleiste ist. scheint einen zusätzlichen Versatz von 52 Pixel zusätzlich zu den Standardeinstellungen zu erfordern
Dies war etwas knifflig, da sich das angepasste ContentInset abhängig vom titleBar-Status (großer Titel vs. kleiner Titel) ändert. Daher musste ich überprüfen, wie hoch die titleBar-Höhe war, und den 52px-Offset nicht anwenden, wenn er sich bereits im großen Status befindet. Es konnte keine andere Methode gefunden werden, um den Status der Navigationsleiste zu überprüfen. Wenn also jemand eine bessere Option hat, als zu sehen, ob die Höhe> 44,0 ist, würde ich sie gerne hören
Inspiriert von Jakubs Lösung
quelle
Es ist sehr häufig, wenn Ihre Navigationsleiste den kleinen Teil des scrollView-Inhalts überlappt und es so aussieht, als würde der Inhalt nicht von oben beginnen. Um das Problem zu beheben, habe ich zwei Dinge getan:
quelle
Nach oben scrollen für
UITableViewController
,UICollectionViewController
oder jederUIViewController
mitUIScrollView
quelle
In SWIFT 5 Setzen Sie einfach den Inhaltsversatz auf Null
quelle
Ich habe alle Möglichkeiten ausprobiert. Aber nichts hat bei mir funktioniert. Endlich hat mir das gefallen.
Ich habe eine
self.view .addSubview(self.scroll)
Codezeile in viewDidLoad hinzugefügt. Nach dem Einrichten des Rahmens für die Bildlaufansicht und dem Hinzufügen von Komponenten zur Bildlaufansicht.Es hat bei mir funktioniert.
Stellen Sie sicher, dass Sie
self.view .addSubview(self.scroll)
am Anfang eine Zeile hinzugefügt haben . Dann können Sie UI-Elemente hinzufügen.quelle