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]