xcode ios uiview autoresize autoresizingmask

xcode/iOS: Autoresize para completar una vista: ¿el tamaño de fotograma explícito es esencial?



uiview autoresizingmask (2)

Me gustaría que una UITextView llene su superView , que es una UIView simple dentro de una instancia de UIViewController .

Parece que no puedo hacer que el UITextView haga esto únicamente mediante el uso de las propiedades especificadas por API de autoresizingMask y autoresizesSubviews . Establecer esto como se muestra aquí no hace nada; el UITextView permanece pequeño a pesar de que su superView llena la pantalla.

// 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];

Sin embargo, si instalo mi propia vista dentro del controlador de vista, reemplazando su propiedad ''.view'', todo funciona como se espera y textView completa su supervista:

// 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];

He intentado ambos fragmentos de código dentro de todos estos inicializadores / métodos, y la misma situación se presenta en todos los casos:

-(id)init; -(id)initWithFrame:(CGRect)frame; -(void)viewDidLoad;

Me doy cuenta de que la reinstauración de ''.view'' del UIViewController es UIViewController , ¿alguien puede explicar lo que estoy haciendo mal? Supuse que podría superar el problema teniendo el código inicial de configuración de marcos en mi UIViewController para cambiar el tamaño del UITextView una vez, y después de eso el autoresizing funcionaría como lo desease.

-(void)viewDidLoad { textView.frame = self.view.frame; }

... pero al parecer el view.frame no está configurado en esta etapa, no tiene definidos sus valores ''.size'', por lo que una vez más, textView sigue siendo pequeño.

¿Cuál es la forma correcta de lograr lo que quiero? ¿Debo especificar explícitamente las dimensiones de pantalla completa a través de UITextView:initWithFrame para que complete su supervista?

Estaría agradecido por cualquier consejo que pueda ofrecer.


Autoresizing no significa que la subvista tomará el tamaño de su supervista. Simplemente significa que cambiará el tamaño en relación con el cambio de tamaño de su supervista cada vez que cambien los límites de la supervista. Entonces, inicialmente, debe establecer el tamaño de la subvista al valor correcto. La máscara de aumento automático se ocupará de los cambios de tamaño en el futuro.

Esto es todo lo que necesita:

textView = [[[UITextView alloc] autorelease] initWithFrame:self.view.bounds]; [textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth| UIViewAutoresizingFlexibleHeight];


Y aquí la solución Swift 3 :

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]