UIView und AutoresizingMask ignoriert

7

Zum ersten Mal beim Stack-Überlauf.

Ich habe Stunden damit verbracht, viele Google-Suchen zu durchsuchen, und habe mir zu diesem Zeitpunkt die Klassenreferenzdokumente UIView und UIViewController auswendig gelernt. Egal, was ich tue, meine App ignoriert meine Bemühungen, meine Ansichten zur Orientierungsänderung zu ändern (oder jede andere Änderung der Bildgröße.)

Es sind keine Nibs oder Xibs beteiligt; Ich baue alle meine Ansichten und Viewcontroller programmgesteuert auf, und sie (die Viewcontroller) sind alle Unterklassen einer von drei benutzerdefinierten UIViewController-Unterklassen, die ich erstellt habe. Diese Super-Klassen haben folgende Zeilen in ihrer loadView: -Methode ...

%Vor%

In allen geeigneten Setter-Methoden (wo auch immer ich eine Unteransicht mit anderen Worten hinzufüge) wiederhole ich die Schritte der Anwendung der AutoresizingMask. Es scheint, dass egal was ich mache, das Ergebnis immer dasselbe ist - ich klicke auf Build, klicke auf Debug, warte auf den Start der App, drehe das Gerät und presto! Die Ansicht wird gedreht, ändert sich jedoch nicht.

Was fehlt mir hier? Es ist wahrscheinlich etwas offensichtlich, dass ich gerade nicht sehe. Jede Hilfe wird wirklich geschätzt, danke im Voraus.

    
quickthyme 18.09.2010, 11:44
quelle

1 Antwort

33

Nun, sicher genug, es war meine eigene Schuld.

Lektion Nummer eins: Sie tun sich keinen Gefallen, indem Sie die ganze Nacht aufbleiben und versuchen, kaputten Code zu reparieren. Mach eine Pause! Trinke mehr Wasser! Sie werden die Dinge wahrscheinlich nur noch schlimmer machen, wenn Sie versuchen, Ihr Gehirn dazu zu zwingen, komplizierte algorithmische Strategien und Logik nach seiner Schlafenszeit durchzuführen.

Es stellte sich heraus, dass ich eine bösartige UIView am unteren Ende der Ansichtshierarchie hatte, bei der die Eigenschaft "autoresize" überhaupt nicht gesetzt war. Ich dachte, ich hätte alles durchgeschaut, aber es stellte sich heraus, dass ich einen vermisste. (Nur eine kleine Ansicht und einen ganzen Tag gedreht!)

Ich kann für jeden, der später mit ähnlicher Frustration kommt, sagen, dass Autoresizing tatsächlich so funktioniert, wie es dokumentiert ist. Wenn Sie denken, dass "etwas nicht angerufen wird", dann suchen Sie wahrscheinlich an der falschen Stelle. Außerdem werden die UIViewAutoresizingMask enum-Konstanten nicht genau wie in Interface Builder verwendet. In IB "sperren" Sie die Ränder, während Sie bei der programmgesteuerten Festlegung standardmäßig die gesperrten Ränder annehmen und Sie sie entsperren, indem Sie sie als "Flexibel" festlegen. Wenn Sie also beispielsweise nur die Bits FlexibleWidth und FlexibleHeight festlegen, werden alle Autoresizing-Optionen in IB aktiviert. Indem Sie eine der Randmasken (d. H.% Co_de%) einwerfen, "deaktivieren" Sie die entsprechende Autoresizing-Option für den Rand in IB. (Ich habe viele andere Beiträge gesehen, die herumschwebten, wo dies für einige Leute ein wichtiger Punkt der Verwirrung zu sein schien.)

Während meiner Recherchen habe ich jedoch festgestellt, dass es keine Art von Ereignis, Nachricht, Benachrichtigung oder sonst etwas zu geben scheint, wenn eine UIView automatisch skaliert wird oder nicht. Es ist zwar nicht notwendig, die Größe von Unteransichten zu ändern, aber es wäre schön zu wissen, wann das passiert, wenn Sie scrollView oder tableView scrollen möchten, sollte sich die Bildgröße jemals ändern. Ich weiß, dass man das leicht machen kann, wenn die Tastatur auftaucht, denn es gibt ein Benachrichtigungssystem und die Methoden UIViewAutoresizingFlexibleLeftMargin TextField . Also vielleicht ein Thema für einen anderen Beitrag ...

Wie auch immer, danke allen, die an StackOverflow teilnehmen!

    
quickthyme 19.09.2010, 10:47
quelle