Ausgabe
Ich habe eine GUI-Klasse, die UIViewController erweitert.
In seiner Funktion viewDidLoad
möchte ich eine UITextField
Instanz haben. Ich möchte, dass diese Instanz nicht als einfaches CGRect ausgerichtet wird und ihren Versatz und ihre Breite und Höhe festlegt, sondern dass sie dynamisch in der Größe geändert wird, sodass sie die gesamte Breite des Bildschirms ausfüllt, mit einem Versatz von 5 Pixeln von oben, links und jeweils rechts und einer Höhe von 20px. Wie wird das gemacht?
Es sollte die “relativ-absolute” Positionierung unabhängig von der Ausrichtung des Geräts beibehalten, wobei alle Ausrichtungen unterstützt werden.
Vielleicht gibt es so etwas wie einen LayoutManager, wie zum Beispiel GridBagLayout in Java?
Lösung
Sie möchten die autoresizingMask
Eigenschaft der Ansicht festlegen.
UIView *theParentView; // Assume this is the root view that owns the whole screen
CGRect textFieldFrame = CGRectMake(5, // Top-left corner x position
5, // Top-left corner y position
[theParentView bounds].width - 10, // Width
20); // Height
UIView *myView = [[UIView alloc] initWithFrame:textFieldFrame];
// This will make it resize with the parent view, maintaining margins
[myView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[theParentView addSubview:myView];
[myView release];
Dies kann alles auch über Interface Builder erfolgen. Es gibt sogar eine kleine Animation, die zeigt, wie die Ansicht in Interface Builder skaliert wird.
Beantwortet von – BJ Homer
Antwort geprüft von – Senaida (FixError Volunteer)