xcode / iOS: Autoresize para llenar una vista-el tamaño explícito del marco es esencial?


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

Parece que no puedo hacer que UITextView haga esto únicamente usando las propiedades especificadas por la API de autoresizingMask y autoresizesSubviews. Configurarlos como se muestra aquí no hace nada; el UITextView sigue siendo 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 instancio mi propia vista dentro del controlador de vista, reemplazando su '.ver ' propiedad, entonces todo funciona como se espera, y el TextView llena su supervision:

// 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 probado ambos fragmentos de código dentro de todos estos inicializadores / métodos, y la misma situación surge en todos los casos:

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

Me doy cuenta de que reinstanciar el '.vista ' de la UIViewController es fugly, puede alguien explicar lo que estoy haciendo mal? Supuse que podría superar el problema al tener un código de configuración de marco inicial en mi UIViewController para cambiar el tamaño del UITextView una vez, y luego autoresizing funcionaría como se desee.

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

... pero aparentemente la vista.marco no se establece en esta etapa, no tiene su '.tamaño ' valores definidos, por lo que una vez más TextView sigue siendo pequeño.

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

Estaría agradecido por cualquier consejo que pueda ofrecer.

Author: Alex Cio, 2011-02-07

2 answers

Autoresizing no significa que el subview tomará el tamaño de su superview. Solo significa que se redimensionará en relación con el cambio de tamaño de su superview cada vez que cambien los límites de la superview. Así que inicialmente, usted tiene que establecer el tamaño de la subview al valor correcto. La máscara de autoresizing se ocupará de los cambios de tamaño en el futuro.

Esto es todo lo que necesitas:

textView = [[[UITextView alloc] autorelease] initWithFrame:self.view.bounds];
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
                              UIViewAutoresizingFlexibleHeight];
 89
Author: Ole Begemann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-06 14:25:15

Y aquí Swift 3 solución:

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
 0
Author: Philippe H. Regenass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-19 08:06:06