UIView addsubview nach der Änderung der Ausrichtung: Tell Ansicht zur Größenanpassung

7

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:

Beim Hinzufügen einer Unteransicht ändert sich die Größe der Ansicht nicht, wenn sich die App im Querformatmodus befindet

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!

    
marimba 13.05.2011, 17:29
quelle

4 Antworten

19

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.

    
idz 14.05.2011, 08:43
quelle
1
%Vor%

Das funktioniert für mich (Y)

    
yasirmturk 05.08.2011 12:05
quelle
1

Ich weiß nicht, ob Sie immer noch dieses Problem haben.

Nehmen wir an, Sie haben die folgende Architektur:

  • Fenster
    • Unteransichtscontroller

(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.

    
Phil K. 26.09.2011 14:07
quelle
0

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.

    
occulus 13.05.2011 20:10
quelle