Friday, February 24, 2017

Edgesforextendedlayout Scrollviewsuite

Das Problem ist, dass meine Ansicht, die eine UIView und eine UITableView in einer ScrollView enthält. Wird unter der UINavigationBar ausgeblendet, wenn sie lichtdurchlässig eingestellt ist. Ich habe mehrere Threads wie diese berücksichtigt. Aber sie alle vorschlagen, um: In Swift 2, war dieser Code: Ich habe auf Xcode 8.1 und Swift 3.0.1 aktualisiert heute, aber ich kann nicht finden, etwas in der Release-Notizen zu diesem Thema. Der Compiler sagt mir, dass. None wurde in. none geändert. Aber nach dem Bearbeiten, dass. none nicht vorhanden ist. Das Ändern von. top hatte keine Auswirkung. Die tableView wird programmgesteuert aufgebaut und das Einsetzen von Insets hilft nicht, da ich ein scrollView mit einem UIView oben auf dem UITableView habe, das unter der UINavigationBar versteckt ist. Was mir fehlt, ist Hilfe sehr zu schätzen. Gefragt Okt 29 16 am 3: 45Building Dynamische benutzerdefinierte Ansichten Aug 29th. 2014 11:29 am Comments Letzte Woche habe ich Fragment für Android veröffentlicht. Fragment besteht aus allen Arten von benutzerdefinierten Ansichten, die ich denke, setzt es von vielen Anwendungen im Play Store. Einige dieser Ansichten haben ein ähnliches Muster wie die Ansichten, die Irsquove für andere Anwendungen erstellen musste, bei denen eine Scrollansicht eine Polsterung aufweist, sodass jedes Element innerhalb des Bildes in die Mitte der Ansicht gescrollt werden kann. Auf itrsquos Oberfläche dieses doesnrsquot scheinen komplex, aber wenn man bedenkt, die massiven Unterschied in den Bildschirmgrößen auf Android, die Dinge bekommen ein wenig komplizierter. Die Control Letrsquos beginnen mit der Definition unseres Endziels. Das Steuerelement, das wir erstellen möchten, ermöglicht es dem Benutzer, eine Ansicht zu scrollen, so dass jeder Inhalt in die Mitte des Bildschirms verschoben werden kann. Herersquos eine Animation zeigt, was ich meine. Diese Kontrolle, gekocht, ist wirklich nur ein HorizontalScrollView. Beachten Sie, wie, wenn der Benutzer bis zum Ende scrollt, gibt es eine schöne Overscroll-Anzeige. Wenn der Benutzer die Steuerung fliegt, bewegt er sich entsprechend. Die Steuerung verzögert gut wie alle anderen Android ScrollViews, so dass es für den Benutzer natürlich fühlen. Dies sind alle Dinge, die Sie kostenlos durch Subclassing ein Build im Android-Widget erhalten. Diese Auffassung stellt jedoch zwei Herausforderungen. Zuerst muss die ScrollView beobachtbar sein, so dass wir unseren Wert aktualisieren können, wenn der Benutzer die Ansicht scrollt. Zweitens benötigen wir genügend Polsterung auf jeder Seite der Ansicht, so dass der Inhalt scrollen, so dass die Kanten mit der Mitte des Bildschirms ausrichten. Letrsquos packen diese zu einem Zeitpunkt unten. Ein Observable ScrollView Die erste Herausforderung, die eine beobachtbare ScrollView (horizontal in unserem Fall), ist eigentlich ganz einfach. Die Ausrichtung der ScrollView isnrsquot wichtig, so dass dies mit vertikalen oder horizontalen Scroll-Ansichten funktioniert. Dies ist ein überraschend einfaches Problem, und Irsquom immer überrascht, wenn Irsquom daran erinnert, dass dieses Feature isnrsquot in die Standard-Android ScrollView-Klasse gebaut. ListView hat eine Listener-Schnittstelle, die mit den Änderungen der Bildlaufposition benachrichtigt werden soll. Warum also nicht ScrollView. Letrsquos nur davon ausgehen, dass die AOSP-Entwickler dachte, es war zu einfach, um verlangt werden. Während die eingebauten ScrollView-Klassen donrsquot über eine OnScrollChangedListener-Schnittstelle verfügen, verfügen sie über eine geschützte onScrollChanged-Methode, sodass wir einfach die Unterscheidung der ScrollView unserer Auswahl und die Erstellung unserer eigenen Schnittstelle vornehmen können. Herersquos wie meins aussieht. Wie Sie sehen können, ist das einzige, was Irsquove hier hinzugefügt die OnScrollChangedListener-Schnittstelle, und nannte es, wenn die ScrollViewrsquos Position ändert. Dies ist eine super einfache Unterklasse, die den eingebauten ScrollView-Klassen einen immensen Wert hinzufügt. Herersquos ein Beispiel dafür, wie Sie diese nutzen könnten. Diese einfache Lösung bringt uns genau das, was wir wollen, und doesnrsquot alles, was viel Aufwand zu implementieren. Abgesehen von der Klasse Namen, denke ich, es passt sogar sehr schön in mit den anderen Android API-Klassen. Wo habe ich diese elegante Lösung, fragen Sie, während Irsquove mehrfach darauf hingewiesen, dass dies eine sehr einfache Lösung ist, kam die Idee, wie man das Problem tatsächlich kam aus einem Stück Open-Source-Code, dass ich eine Weile zurück. Deshalb lohnt es sich, in Open Source, auch wenn itrsquos nur Tauchen durch den Code von anderen beteiligt sein. Dynamische Padding Die andere Herausforderung, die wir bei der Erstellung dieser Ansicht erkannten, war, dass der Scroll-Inhalt in der Mitte des Bildschirms sein muss. Die Herausforderung hierbei ist, dass wir die Breite des Bildschirms zur Kompilierzeit nicht kennen und canrsquot sogar die Breite der Ansicht erhalten, bis sie gemessen wird, so dass wir eine dynamische Art und Weise benötigen, um den Abstand um den Bildlauf hinzuzufügen. Im folgenden werde ich zwei Ansätze für dieses Problem, aber beide lösen das Problem in der gleichen Weise. Die Grundidee besteht darin, unsichtbare Abstandshalter vor und nach dem Scrolling-Inhalt hinzuzufügen, die so bemessen sind, dass diese tatsächlichen Inhalte in der Lage sind, ihre linke Kante zur Mitte der Scroll-Ansicht zu scrollen. Wie Sie im obigen Diagramm sehen können, muss die ScrollView-Funktion doesnrsquot etwas anderes in Bezug auf itrsquos scrolling tun, es scheint nur Elemente zu scrollen, um die Mitte des Benutzers. OnPreDrawListener Eine Möglichkeit, dies zu erreichen, ist die Verwendung der ViewTreeObserver rsquos OnPreDrawListener. Dies ist ein super handlicher Rückruf, der aufgerufen wird, bevor unsere Ansichten gezogen werden, aber nachdem sie gemessen wurden. Dies ermöglicht es uns, unsere Ansichten zu modifizieren (Spacer hinzufügen), sobald wir die Größe der Ansicht kennen. Herersquos ein Beispiel: Dies ist ein schöner Ansatz, weil es auf jede ScrollView in den Code hinzugefügt werden kann, ohne Änderung Ihrer vorhandenen Layouts (vorausgesetzt, das Kind der ScrollView ist ein LinearLayout entsprechend orientiert). Werfen Sie diese in einen View Helper und es kann so einfach sein wie ViewHelper. addScrollingSpacers (scrollView). Ein Nachteil dieses Ansatzes ist, dass wir tatsächlich wegwerfen ein Maß-Layout-Draw-Zyklus. Denken Sie daran, dass unser OnPreDrawListener am Ende dieses Zyklus aufgerufen wird, damit wir die Breite unserer ScrollView kennen. Das bedeutet, dass das erste Mal, dies ist wirklich ein Maß-Layout-add-Abstandshalter-Maß-Layout-zeichnen Zyklus. Am Ende des Tages, da dies nur einmal passiert, itrsquos nicht im Allgemeinen eine große Sache, aber es ist etwas zu beachten. Aber was, wenn es einen Weg, um unsere Spacer früher in der Maßnahme-Layout-Draw-Zyklus Wie es geschehen würde, gibt es. Da wir das Layout der Elemente ändern möchten, können wir mit einer benutzerdefinierten zusammengesetzten Ansicht unsere Anpassungen während des Layout-Zyklus vornehmen, dh keine vergeudete Zeit. Herersquos, wie wir das erreichen könnten. In diesem Beispiel können Sie sehen, dass unsere benutzerdefinierte zusammengesetzte Ansicht wirklich der Container eines ObservableHorizontalScrollView ist, und dass sie die Abstandsbreite festlegt, wann immer sich das Layout ändert, während des ursprünglichen Layoutdurchlaufs. Dieser Ansatz macht auch unsere Sicht leicht wiederverwendbar über unsere XML-Layouts, wie so: Sie haben jetzt ein paar verschiedene Möglichkeiten, um eine benutzerdefinierte Ansicht erstellen, die Ihre Benutzer begeistern wird. Welches Sie wählen, ist völlig bis zu Ihnen, aber beide können ausgedehnt werden, um mit ListViews zu arbeiten, oder wirklich jede scrollenansicht, zu denen Sie etwas Extraraum möchten würden. Diese Techniken können auch für andere Effekte verwendet werden. Zum Beispiel, zusätzlich zu dieser für benutzerdefinierte Wert Selektoren verwendet, verwendet Irsquove den gleichen Ansatz für Dinge wie Parallaxe-Effekte. Theresquos nur ein paar Werkzeuge für Ihren Werkzeuggürtel. Wenn yoursquove etwas ähnliches getan hat oder einen anderen Ansatz hat, teile es in die Kommentare ein. Geschrieben von Ryan Harter Aug 29th. 2014 11:29 am Aktuelle Beiträge Google


No comments:

Post a Comment