Thursday 16 November 2017

Edgesforextendedlayout Scrollviewdidendzooming


Ich habe versucht, für eine ganze Weile, um eine Parallax-Stil Tabellenansicht Header, der aus einem Bild, ähnlich wie die Yahoo News Digest App, oder bei der Anzeige eines Unternehmens in Maps. app besteht. (Wenn Sie mit dem Gummiband der Tabelle die Bildhöhe wachsen, und wenn das Bild nach unten scrollt, scheint es etwas langsamer zu scrollen). Heres ein demonstratives Video mit freundlicher Genehmigung von APParallaxHeader: Das beste Tutorial, das ich finden konnte, war dieses Tutorial. Was im Grunde darin besteht, die Bildansicht als Unteransicht der Tabellenansicht hinzuzufügen. Während das meistens funktioniert, Hinzufügen als Untersicht zu UITableView ist ziemlich undokumentiert, und in meinem Test scheint nicht mit Auto-Layout zu arbeiten und somit Rotation spielt nicht schön. Die Bibliothek, die ich oben verband, APParallaxHeader. Scheint zu funktionieren, aber seine Umsetzung ist wirklich verwirrend, und scheint zu swizzling, wenn Im nicht falsch Gibt es eine einfache Möglichkeit, dies zu tun, dass Im nur völlig zu übersehen Nachdem ich dieses Problem einige mehr Gedanken, ich denke, der beste Weg, um diesen Look zu duplizieren Ist mit einer Scrollansicht, die eine Bildansicht enthält, die hinter (im Sinne von z-Ordnung) liegt und unterhalb (in Richtung der y-Richtung) die Oberseite einer Tabellenansicht erstreckt. In dem Test, den ich tat, gab ich der Tabellenansicht einen Header (in IB), der 100 Punkte hoch war, und mit einer klaren Hintergrundfarbe (die Tabelle braucht auch eine klare Hintergrundfarbe). Die Scroll-Ansicht und die Tabellenansicht wurden sowohl an die Seiten der Hauptansicht des Controllers als auch an die obere Layout-Anleitung gepinnt (die Steuerung ist in einen Navigationscontroller eingebettet, der so eingestellt wurde, dass seine Ansicht nicht unter die obere Leiste gehen kann). Die Tabellenansicht wurde auch an der Unterseite der Ansicht gepinnt, und die Bildlaufansicht wurde eine feste Höhe von 200 angegeben. Ich gab der Bildlaufansicht einen Anfangsoffset von 50 Punkten, so dass, wenn Sie anfangen, auf dem Tisch zu ziehen, die Scroll-Ansicht können mehr Inhalte von oben in die Ansicht scrollen, während auch mehr Inhalt am unteren Rand angezeigt wird (die Verschiebung der Bildlaufansichten bewegt sich bei 12, die Rate der Tabellenansichts-Verschiebung). Sobald die Tabellenansichten Offset -50 erreicht haben, höre ich auf, die Scrollansichts-Offset zu ändern und das Zoomen zu starten. Ive hat eine Kopie von diesem Projekt hier hochgeladen, jmp. shLRKF0nM antwortet Jan 4 15 at 17:39 Das ist schön. Aber mit Ihrem Bild it39d vorzuziehen, dass es die volle Höhe vor dem Zoomen zu erweitern, mit, wie das Ändern eines Bildes view39s Höhe normalerweise funktionieren würde. Auch sieht es offensichtlich seltsam, wenn Sie zu weit auf der Tisch-Ansicht zu ziehen und die Kopfzeile hält Zoomen, ohne seine Höhe zu ändern. Ist das vermeidbar ndash Doug Smith Jan 4 um 20:05 DougSmith, sicher, können Sie einstellen, wie weit es blättert, bevor es zoomt. Wie für den zweiten Punkt, I39m sicher, dass Sie das auch durch Messing mit den Parametern ändern können. Sie haben die Höhe der Bildlaufansicht, die Höhe der Kopfzeilenansicht und den Anfangsversatz der Bildlaufansicht zum Abspielen erhalten. Ndash rdelmar Jan 4 15 am 21:28 Ich dachte, Id werfen eine andere Idee, die nicht eine separate Scroll-Ansicht. Ich denke, das funktioniert ein wenig besser mit der Art, wie es erweitert. Also, bei diesem Versuch, füge ich einfach die Bildansicht als Untersicht der Hauptansicht, und legte es so 12 wie viel von der Bildansicht ist über dem oberen Rand des Headers (out of view) als unterhalb der Kopfzeile (zunächst verborgen Durch die Tabellenzeilen). Beim Herabziehen des Tisches wird die Ansicht mit der halben Rate des Pull-Downs (durch Einstellen einer Constraint) nach unten verschoben, so dass der obere und der untere Teil des Bildes zusammen kommen, dann von dort aus die Erweiterung unter Verwendung von Eine Transformation. Ich habe versucht, diesen Code und es doesn39t scheinen überhaupt zu arbeiten. Mein Hauptproblem bei der Verwendung der Header-Ansicht, (und ich könnte hier falsch sein, aber es scheint in diesem Code auch vorhanden ist), dass beim Ziehen und der Tabellenansicht quotrubber bandsquot die Tabellenansicht und deren Header physisch nach unten verschoben werden als Nun, so wouldn39t der Header haben, außerhalb der Tabelle view39s Grenzen oder etwas ndash ziehen Doug Smith Jan 3 15 at 18:36 DougSmith, wenn die Scroll-Ansicht scrollt, sind it39s Subviews fixiert relativ zu ihrer Aufsicht (die Scroll-Ansicht). Die subviews bewegen sich relativ zur scroll view39s superview, aber das macht nichts. Lassen Sie mich darüber nachdenken. Ich könnte versuchen, tatsächlich implementieren diese für Spaß heute oder morgen. Wenn ich tue, beantwortet Antwort hier. Ndash danh Jan 3 15 am 18:47 Okay, heres eine Antwort, die den Vorteil hat, gebaut und ausprobiert hat. Ich fand es zu schwer, um den Rahmen der Tabellen tatsächlichen Header-Ansicht zu manipulieren, so fügte ich eine Subansicht der Tabelle über den Zeilen. Damit diese Ansicht als regulärer Tabellenkopf angezeigt wird, habe ich dem Tisch eine feste, transparente Kopfzeilenansicht gegeben. Die Hauptidee ist wie das, was ich oben beantwortet habe: Verwenden der Tabelleninhalte Offset als Parameter für das Ändern des Bildansichtrahmens und der imageViews-Inhaltsmodus (korrigiert zu UIViewContentModeScaleAspectFill), um den Zoom-Effekt zu liefern, wenn sich der Rahmen ändert. Heres die ganze Ansicht Steuerpult. Dieser wird aus einem Storyboard erstellt, in dem sich der View-Controller innerhalb eines Navigationscontrollers befindet. Es hat nichts mehr als eine Tabellenansicht, die seine Ansicht füllt, mit der Datenquelle und dem delegierten Satz. (UID) scrollViewDidScroll: (UIScrollView) scrollView - (void) scrollViewDidZoom: (UIScrollView) scrollView - (void) scrollViewWillBeginDragging: (UIScrollView) scrollView - (void) scrollViewWillEndDragging: (UIScrollView) scrollView mitVelocity: (Void) scrollViewDidEndDecelerating: (UIScrollView) scrollView - (void) scrollViewWillBeginDecelerating: (UIScrollView) scrollView - (void) scrollViewDidEndDecelerating: (UIScrollView) scrollView (nicht gültig) ) ScrollViewDidEndScrollingAnimation: (UIScrollView) scrollView - (UIView) AnsichtForZoomingInScrollView: (UIScrollView) scrollView - (void) scrollViewWillBeginZooming: (UIScrollView) Ansicht - (void) scrollViewDidEndZooming: (UIScrollView) scrollView withView: (UIView) view atScale : (CGFloat) Skala, minimumZoomScalemaximumZoomScale - (BOOL) scrollViewShouldScrollToTop: (UIScrollView) scrollView - (void) scrollViewDidScrollToTop: (UIScrollView) scrollView

No comments:

Post a Comment