Ich habe eine UIView als XIB im Portrait-Modus.
Diese Ansicht wird dem viewcontroller wie folgt hinzugefügt:
%Vor%In dieser Ansicht sind die Masken für die Autoresierung ordnungsgemäß eingerichtet und können gedreht werden, wenn sich die Ausrichtung von Hochformat in Querformat ändert.
Wenn jedoch die Ausrichtung bereits Landschaft ist und ich die Ansicht nach der Ausrichtung erzeuge, hat sie ihre ursprüngliche Hochformatausrichtung.
Gibt es eine Möglichkeit, der Ansicht zu sagen, dass sie sich mithilfe ihrer Masken initialisieren oder ihre Größe ändern soll?
Vielen Dank im Voraus für eine Antwort!
BEARBEITEN: Mit den Vorschlägen von okculus und Inder Kumar Rathore (danke Jungs!) Habe ich den Code folgendermaßen geändert:
%Vor%Leider gibt es überhaupt keine Veränderung. Ich denke, ich habe jemanden gefunden, der dieselbe Frage stellt:
Die Antwort identifiziert das Problem richtig, ist aber nicht sehr ermutigend ... Sicher, ich könnte zwei Nibs erstellen oder die Größe des Frames ändern, aber das scheint der Idee der automatischen Größenänderung zu widersprechen. Ich finde es schwer zu glauben, dass es keine Möglichkeit gibt, eine Spitze nach dem Erwachen zu sagen und sie einer Ansicht hinzuzufügen, um ihre Autoresize-Funktionen zu verwenden ... etwas, das fehlerfrei funktioniert, wenn das Gerät rotiert.
EDIT 2:
Die Lösung von idz funktioniert:
%Vor%Danke!
Oft enthält eine NIB / XIB-Datei ein UIViewController
, das sich um all das kümmert. In diesem Fall müssen Sie, da sie kein View-Controller sind (in der NIB / XIB), ihre Post-Load-Aufgaben übernehmen.
Wenn Sie layoutSubviews
direkt oder indirekt über setNeedsLayout
oder layoutIfNeeded
aufrufen, bringt das nicht viel, weil die Standardimplementierung nichts tut.
Angenommen, Sie möchten, dass die Eingabeansicht die Grenzen von self.view ausfüllt, machen Sie Folgendes:
%Vor%Alle Größenmasken der Unteransichten müssen korrekt gesetzt sein, damit dies funktioniert. Wenn Sie natürlich nicht die vollen Grenzen ausfüllen möchten, sollten Sie den Rahmen anpassen.
Ich weiß nicht, ob Sie immer noch dieses Problem haben.
Nehmen wir an, Sie haben die folgende Architektur:
(Sie haben es implementiert, sollte die richtige Antwort auf die gewünschten Orientierungen korrekt sein)
In diesem Subviewcontroller möchten Sie die Ansichten neuer UIViewControllers hinzufügen, indem Sie einfach die Funktion addSubview
aufrufen.
Anstatt die Manipulation der Grenzen in shootautorotate zu implementieren, sollten Sie sie in
implementieren %Vor% didRotateFromInterface
... wird nach shouldRotate
aufgerufen. In dieser Funktion sind die Grenzen bereits korrekt eingerichtet.
Auf diese Weise brauchen Sie nicht so viel Manipulation durch Code.
Siehe diese verwandte Frage:
Wann werden Autoresizing-Masken in iOS wirksam?
Nachdem Sie Ihre neue Ansicht von der Schreibfeder geladen und als Unteransicht zu self.view
hinzugefügt haben, versuchen Sie, setNeedsLayout
aufzurufen.
Tags und Links iphone orientation addsubview autoresizingmask