xcode / iOS: Autoresize zum Füllen einer Ansicht - explizite Framegröße ist essentiell?
Ich würde gerne eine UITextView
zu füllen Ihre superView
das ist die Ebene UIView
innerhalb einer UIViewController
Instanz.
Es scheint, dass ich nicht die UITextView
tun dies ausschließlich über die API-angegebenen Eigenschaften autoresizingMask
und autoresizesSubviews
. Diese Einstellung, wie hier gezeigt, macht nichts; die UITextView
bleibt klein, auch wenn seine superView
den Bildschirm ausfüllt.
//use existing instantiated view inside view controller;
//ensure autosizing enabled
self.view.autoresizesSubviews = YES;
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight|
UIViewAutoresizingFlexibleWidth;
//create textview
textView = [[[UITextView alloc] autorelease] initWithFrame:CGRectMake(0, 0, 1, 1)];
//enable textview autoresizing
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
UIViewAutoresizingFlexibleHeight];
//add textview to view
[self.view addSubview:textView];
Jedoch, wenn instanziieren ich meine eigene Ansicht innerhalb des view-Controllers ersetzen sein '.Ansicht "Eigenschaft", dann funktioniert alles wie erwartet, und die textView füllt seinen superview:
//reinstantiate view inside view controller
self.view = [[UIView alloc]init];
//create textview
textView = [[[UITextView alloc] autorelease] initWithFrame:CGRectMake(0, 0, 1, 1)];
//enable textview autoresizing
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
UIViewAutoresizingFlexibleHeight];
//add textview to view
[self.view addSubview:textView];
Habe ich versucht die beiden code-Blöcken in allen diesen initialisers/Methoden, und die gleiche situation ergibt sich in jedem Fall:
-(id)init;
-(id)initWithFrame:(CGRect)frame;
-(void)viewDidLoad;
Mir ist klar, dass reinstantiating '.Ansicht die UIViewController
ist fugly, kann mir jemand erklären, was ich falsch mache? Ich vermutete, ich könnte überwinden das Problem durch erste frame-Einstellung code in meine UIViewController
um die Größe des UITextView
einmal, und danach autoresizing
würde so funktionieren, wie gewünscht.
-(void)viewDidLoad {
textView.frame = self.view.frame;
}
... aber scheinbar der Ansicht.Rahmen ist nicht festgelegt, bis zu diesem Zeitpunkt, es muss nicht sein '.Größe' angegebenen Werte, so einmal textView bleibt klein.
Was ist der richtige Weg, das zu erreichen, was ich will? Muss ich explizit angeben, fullscreen Dimensionen über UITextView:initWithFrame
um es zu füllen Ihre superview?
Wäre ich dankbar für jeden Rat Ihnen anbieten können.
InformationsquelleAutor der Frage KomodoDave | 2011-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Autoresizing bedeutet nicht, dass die Untersicht dauern wird, bis die Größe der superview. Es bedeutet nur, dass es, wird die Größe relativ zur Größe der Veränderung Ihrer superview, wenn die superview - Grenzen ändern. Also zunächst müssen Sie die Größe der Untersicht auf den richtigen Wert. Die autoresizing Maske wird dann befassen sich mit Größe Veränderungen in der Zukunft.
Das ist alles, was Sie brauchen:
InformationsquelleAutor der Antwort Ole Begemann
Und hier Swift 3 Lösung:
InformationsquelleAutor der Antwort Philippe H. Regenass