Laut dem offiziellen Dokument zu UIView über die Eigenschaft contentMode
:
Was ist der Inhalt dieser Definition? Ist es eine Unteransicht oder haben wir beispielsweise eine Hintergrundfarbe für eine Ansicht definiert?
Meine allererste Vermutung war, dass es zumindest für die Subviews in einer View gelten sollte, aber das folgende Code-Snippet gibt mir nicht das erwartete Ergebnis, wenn ich mit dem UIViewContentModeCenter
-Tag spiele:
Ich habe gerade ein redView eingerichtet, das ein greenView enthalten wird. Ich habe auch den Content-Modus der redview auf UIViewContentModeCenter
eingerichtet - warum in dem Code, den ich geschrieben habe, ist die greenView nicht zentriert, wenn ich den Rahmen der Eltern ändern? ist nicht was UIViewContentModeCenter
soll tun?
Danke für die Klärung!
Ps: Sie können den obigen Code einfach in loadView
eines einfachen View-Controller-Vorlagenprojekts testen.
Aus der Dokumentation:
Der Inhaltsmodus gibt an, wie die zwischengespeicherte Bitmap des Layers der Ansicht ist wird angepasst, wenn sich die Grenzen der Ansicht ändern.
Bei einer Bildansicht handelt es sich um das Bild. Für einen Blick das Zeichnet seinen Inhalt, es handelt sich um den gezeichneten Inhalt. Es tut das Layout von Unteransichten nicht beeinflussen.
Sie müssen sich die Autorisierungsmasken in den Unteransichten ansehen. Der Content-Modus ist hier ein Ablenkungsmanöver. Wenn Sie das Layout nicht erreichen können Sie müssen Autoresizing Masken verwenden, dann müssen Sie implementieren layoutSubviews und berechnet die Subview-Positionen und Frames manuell.
aus jrturtons Antwort auf: Ссылка
Lesen Sie zuerst Inhaltsmodi hier
In Ihrem Beispiel ändern Sie den Rahmen der roten Ansicht. Dies ruft layoutSubviews in der Ansicht auf, die die grüne Ansicht entsprechend den Layout-Einschränkungen oder Autoresierungsmasken neu positioniert. Sie haben keine angegeben. Der Rahmen der grünen Ansicht bleibt also gleich.
Der Inhaltsmodus gibt an, wie der Layer der Ansicht beim Ändern der Größe aktualisiert werden soll. Abhängig vom Content-Modus wird drawRect aufgerufen oder nicht.
Sie können den Effekt der verschiedenen Inhaltsmodi mit dem folgenden Beispiel testen:
Fügen Sie eine UIView-Unterklasse hinzu, die mit dieser drawRect-Implementierung einen Kreis zeichnet:
%Vor%In der Ansicht Controller erstellen und fügen Sie die Kreisansicht hinzu:
%Vor%Lasst nun den Rahmen animieren und sehen was passiert:
%Vor%Ich mache das asynchron, um CoreGraphics zu zwingen, die Ansicht mindestens einmal mit dem Originalrahmen zu zeichnen. Wenn Sie den Inhaltsmodus nicht einstellen, entsteht ein verschwommener Kreis, da er sich ohne Neuzeichnen skaliert. UIViewContentModeCenter sorgt dafür, dass der kleine Kreis in der Mitte bleibt - auch kein Neuzeichnen erforderlich. UIViewContentModeRedraw bewirkt, dass die Ansicht die Ansicht erneut mit dem neuen Rahmen zeichnet. Eigentlich passiert das vor dem Start der Animation.
Beachten Sie, dass der Inhaltsmodus die Zeichenleistung beeinträchtigen kann.
Tags und Links uiview ios5 uiview-hierarchy contentmode