Ich habe einen UIPageViewController mit transluzenter Statusleiste und Navigationsleiste. Sein topLayoutGuide ist, wie erwartet, 64 Pixel. Jedoch berichten die untergeordneten Ansicht-Controller des UIPageViewController einen topLayoutGuide von 0 Pixeln, auch wenn sie in der Statusleiste und der Navigationsleiste angezeigt werden. Ist dies das erwartete Verhalten Wenn ja, was ist der beste Weg, um eine Ansicht eines Kind-View-Controller unter dem realen topLayoutGuide (kurz vor der Verwendung von parentViewController. topLayoutGuide Position, die Id betrachten einen Hack) gefragt Oktober 2, um 15:20 Ich denke, there39s Auf jeden Fall etwas ein bisschen funky los. Ich habe einen UINavigationController mit einem UITabbarController innerhalb. Die Registerkarte, die anfangs ausgewählt wurde, erhält immer den richtigen Abstand, der unterhalb der Navigationsleiste angezeigt wird. Aber beim Umschalten auf die anderen Registerkarten erscheinen die oberen Zellen unter dem oberen Balken. Ndash Stephen Darlington Obwohl diese Antwort richtig sein könnte, fand ich immer noch mich mit dem Containment-Baum zu finden, um die richtige übergeordneten View-Controller finden und erhalten, was Sie beschreiben, wie die eigentliche topLayoutGuide. Auf diese Weise kann ich manuell automatischAdjustsScrollViewInsets implementieren. Dies ist, wie Im es zu tun: In meinem TableView-Controller (eine Unterklasse von UIViewController tatsächlich), habe ich diese: Beachten Sie die Kategorien Methoden in UIViewController. Dies ist, wie ich sie implementiert: Hope this helps :) Ich könnte falsch sein, aber meiner Meinung nach das Verhalten korrekt ist. Der topLayout-Wert kann vom Container-View-Controller verwendet werden, um seine Ansichten-Subviews zu gestalten. Der Verweis sagt: Um eine obere Layout-Führung ohne Verwendung von Constraints verwenden, erhalten Sie die Führer-Position relativ zur oberen Begrenzung der enthaltenen Ansicht. In der übergeordneten Ansicht ist der Wert 64. Im Kind ist relativ zu der enthaltenen Ansicht (der übergeordnete) der Wert 0. Im Container View Controller können Sie die Eigenschaft auf diese Weise verwenden Childview-Controller muss nicht wissen, dass es eine Navigation und eine Statusleiste gibt. Ihre Eltern haben bereits ihre Unterabschnitte unter Berücksichtigung dieser. Wenn ich ein neues Seiten-basiertes Projekt erstellen, es in einen Navigationscontroller einbetten und diesen Code den übergeordneten Ansicht-Controllern hinzufügen, scheint es, fein zu funktionieren: UIKit. UIViewController-Klasse Die UIViewController-Klasse ist die Basisklasse der View-Controller-Hierarchie. View-Controller verwalten UIView s und andere UIViewController s. Ein iOS-Anwendung hat ein einziges Fenster, aber viele Bildschirme, die jeweils mehrere UIView s enthalten können. Das Verwalten dieser Bildschirme ist komplex und erfordert eine Reaktion auf Benutzereingaben und Änderungen im Modell (Problembereich). Diese Verwaltung und Koordination ist Aufgabe des UIViewControllers. Ein UIViewController hat 3 Hauptverantwortlichkeiten: Layout seiner Komponente UIView s. Dies umfasst die Größenanpassung, die Reaktion auf Orientierungsänderungen usw. Umgestaltung der Anzeige in Reaktion auf Eingabeereignisse oder den Zustand von Modellklassen Benutzereingabe in plattformneutrale Modelldienstanforderungen überführen iOS bietet eine Reihe von Standardansicht-Controllern wie UINavigationController. UITabBarController. Und UIPageViewController. Im Allgemeinen sollte der Anwendungsentwickler es vorziehen, Standardansichtscontroller zu verwenden, um die Gesamtanzeigestruktur zu erzeugen. Die Verwendung von Standardansicht-Controllern bietet ein konsistentes Standardverhalten und erleichtert es der App, sich an die iOS-Benutzeroberfläche anzupassen. Darüber hinaus muss der Anwendungsentwickler generell einen oder mehrere Content View-Controller implementieren. Diese werden oft direkt von UIViewController oder UITableViewController abgeleitet. Content View Controllers sind, wo der Anwendungsentwickler den benutzerdefinierten Code schreibt, um die oben beschriebenen UIViewController-Verantwortlichkeiten zu erfüllen. In Anwendungen, die den Vorteil von Xamarin Studios Code nutzen Behind Einrichtungen für Apples Interface Builder, wird viel von diesem benutzerdefinierten Code automatisch von Xamarin Studio generiert werden. Anwendungen, die mit Dialog geschrieben werden, benötigen in der Regel keinen benutzerdefinierten Content View-Controller, können aber einen für Architekturkonsistenz verwenden. Ein einzelner View-Controller kann viele Ansichten und Subcontroller haben, aber typischerweise hat ein einzelner View-Controller eine einzelne Root-Ansicht und ist hauptsächlich darauf bedacht, diese eine Ansicht zu steuern, oder es wird primär um die Aufrechterhaltung einer Sammlung von Subcontrollern handeln. Im folgenden Beispiel wird aus dem Hello World-Beispiel ein Content View-Controller vom Typ HelloWorldiPhoneViewController instanziiert und als UIWindow. RootViewController für das Anwendungsfenster festgelegt: Im Gegensatz dazu zeigt der folgende Code aus dem Beispiel des iOS-Standardsteuerelements, wie Verwendet ein UITableViewController eine anwendungsdefinierte NavItemGroup, um eine Reihe anderer UIViewController zu verwalten. In diesem Code ist der zweite Parameter für den NavItem-Konstruktor der spezifische UIViewController-Subtyp, der gewünscht wird, wenn dieses Element in der Tabelle ausgewählt wird: UIViewController und die MVC-Architektur Die folgende Abbildung zeigt die klassische Beziehung zwischen Model-, View - und Controller-Klassen. Die Pfeile zeigen Abhängigkeiten an: Die Ansicht hängt von der Modellklasse ab, um Daten bereitzustellen. Der Controller hängt von der Modellklasse für Informationen über die anzuzeigenden Informationen ab und hängt von der Klasse "Ansicht" ab, um die Zeichnung auszuführen. Dieses Diagramm ist idealisiert: es würde mehrere Klassen im Modell, mehrere Ansichten, UIView können tatsächlich UIResponder. NextResponder verwenden, um ihre UIViewController zu bestimmen. Usw. Die Modellklasse hat keine Kenntnisse über die zugehörigen View - und Controller-Klassen. Dadurch kann sich das Modell unabhängig entwickeln und die Wartbarkeit und Portabilität erheblich verbessern. Event-Handler werden zwischen den betroffenen Bereichen eingesetzt. Dies ermöglicht stark typisierte EventArgs, die nur die Daten enthalten, die sich auf dieses Ereignis beziehen. Dadurch wird die Wartbarkeit verbessert, indem der Clientobjektzugriff auf den Event-Provider-Bereich eingeschränkt wird. Der Controller reagiert auf Ereignisse sowohl aus der Sicht als auch aus dem Modell. Ein UIViewController könnte beispielsweise ein UIControl. TouchUpInside-Eingabeereignis verarbeiten, indem es das Modell anfordert, zwischen Celsius - und Fahrenheit-Temperatureinheiten umzuwandeln. Umgekehrt könnte es auf ein Modell zu heißes Ereignis reagieren, indem es die Anzeige ändert (sichtbar ein Warnsymbol oder so). Die Ansicht aktualisiert ihre Anzeige in Reaktion auf neue Daten, die durch Modellereignisse bereitgestellt werden. View-Klassen sollten so passiv wie möglich sein. Einer der häufigsten Fehler in einer nicht wartbaren Software ist eine View-Klasse, die als Controller fungiert oder in das Model für Daten gelangt, statt Werte als Argumente zu übergeben. UIViewController, Interface Builder, Storyboards und Nib-Dateien XCode, Apples IDE enthält Interface Builder (IB), ein Werkzeug, mit dem Interfaces interaktiv erstellt und als Nib-Dateien gespeichert werden können (diese werden im XML-Format mit der Erweiterung. xib gespeichert) . Xamarin Studio erzeugt Code Hinter Klassen für Nib-Dateien und in der Regel werden diese Unterklassen von UIViewController sein. Ab iOS 5 können Anwendungsentwickler mit Storyboards die Navigation unter den einzelnen UIViewController s visuell angeben. Weitere Informationen zu Storyboards finden Sie unter Einführung in Storyboards. Universelle Anwendungen Xamarin Studio unterstützt vollständig universelle Anwendungen, die einen einzigen UIViewController verwenden, um mehrere UIViews für das iPad oder das iPhone angepasst zu steuern. Solange die von den beiden Geräten verwendeten UIViews dieselben Elemente haben, können sie dieselben Outlets und Aktionen gemeinsam nutzen, wie dies im iPad Guide für iPad-Apps beschrieben ist. Es ist jedoch nicht notwendig, dass die iPhone - und iPad-Versionen dieselben UI-Elemente verwenden. Der Anwendungsentwickler kann wünschen, die Vorteile der erhöhten Bildschirm Immobilien und größere Mengen von Kontrollen auf dem iPad zu nutzen. In solchen Fällen sollte der Anwendungsentwickler separate UIViewController s erstellen und sie entsprechend mit dem Code, der dem folgenden ähnelt, wieder aus dem iPad Universal (iPhone iPad) Apps-Guide genommen. Die Auswahl des zu ladenden UIViewController wird zur Laufzeit basierend auf einem Aufruf von CurrentDevice. UserInterfaceIdiom ermittelt. Statuswiederherstellung Wenn Sie die Statuswiederherstellung in Ihrer Klasse bereitstellen möchten, müssen Sie manuell eine Methode mit der folgenden Signatur zu Ihrer Klasse hinzufügen: Adaptives Layout und Rotation Ausgehend von iOS 8 wurde eine Reihe von Idiomen in iOS 8 eingeführt, um Entwicklern beim Erstellen zu helfen Anwendungen und UIViewControllers, die mit verschiedenen Formfaktoren, wie sowohl iPhone und iPad funktionieren würde. Dies ersetzt das Pre-iOS8-Design, das sich auf die Unterstützung von zwei verschiedenen Formfaktoren (iPhone oder iPad) in einer bestimmten Ausrichtung konzentriert und die Übergänge von einer Schnittstellenorientierung zu der anderen unterstützt. Neue Anwendungen sollten eine Anzahl von Variablen berücksichtigen, wenn sie die Elemente auf ihrer Benutzeroberfläche auslegen. Dazu gehören die verfügbare Größe in der Leinwand, UserInterfaceIdiom (iPad oder iPhone), die Display-Skala, und sowohl die vertikale und horizontale Größenklassen. Die erste ist die Größe Ihrer Hauptansicht, während der Rest in der UIViewController. TraitCollection gespeichert wird. Die Rotation wird nun als Klassengrößenänderung betrachtet. Zum Beispiel ein iPhone im Hochformat gehalten hat eine reguläre Höhe und eine kompakte Breite. Wenn Sie es in die Landschaft schalten, wird es eine kompakte Höhe und eine reguläre Breite. Anwendungen können UIViewController. TraitCollectionDidChange überschreiben, um auf Änderungen an den Eigenschaften der Benutzeroberfläche zu reagieren. Diese Methode wird während Rotationen oder Änderungen an der Benutzeroberfläche aufgerufen, die sich auf die Größenklasse der Anwendung auswirken. MVC, MVP und MVVM NET-Entwickler werden vertraut mit Microsoft-geförderten Architekturen, die das gleiche Ziel wie MVC dienen. Sowohl Model-View-Presenter (MVP) als auch Model-View-ViewModel (MVVM) bemühen sich, die Trennung zwischen Modellklassen und Anzeigeklassen zu pflegen. Entwickler, die mit MVP vertraut sind, werden verwendet, um Modelldaten zu modellieren, die durch ein koordinierendes Presenter-Objekt in Richtung des View-Modells statt des MVCs-Modells fließen, in dem Views direkt Model-Ereignisse abonnieren. Es ist möglich, eine MVP-Architektur in iOS durch die Erhöhung der Verantwortlichkeiten eines UIViewController zu tun. Das definierende Merkmal von MVVM ist die Verwendung von Databinding, um sicherzustellen, dass View-Objekte reaktiv sind. IOS-Steuerelemente unterstützen keine Datenbindung, so dass MVVM nicht möglich ist. MVVM-Entwickler werden mehr von einer Firewall zwischen View - und Model-Objekten verwendet, als in MVC verfügbar ist. MVVM-Entwickler sollten sich daran erinnern, dass ihre View-Objekte so reaktiv wie möglich sind und nicht in das Modell für Daten gelangen oder die Controller-Verantwortlichkeiten übernehmen. UIViewController und Dialog Dialog (MT. D) ermöglicht es, komplexe UIs schnell mit deklarativen Anweisungen zu erstellen. Im Gegensatz zu Anwendungen, die mit dem Apples Interface Builder erstellt wurden, verwenden die meisten MT. D-Anwendungen den vordefinierten DialogViewController und erstellen keine eigene Unterklasse von UIViewController. Weitere Informationen finden Sie in der Dokumentation des Dialogs Namespace und im Artikel Einführung in Dialog. Verwandte Inhalte Plattformdokumente
No comments:
Post a Comment