xcode / iOS: Autoresize pour remplir une vue-la taille d'image explicite est essentielle?

Je voudrais qu'un UITextView remplisse son superView, qui est un UIView simple dans une instance UIViewController.

Il semble que je ne puisse pas faire en sorte que UITextView le fasse uniquement en utilisant les propriétés spécifiées par L'API de autoresizingMask et autoresizesSubviews. Les Définir comme indiqué ici ne fait rien; le UITextView reste petit même si son superView remplit l'écran.

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

Cependant, si j'instancie ma propre vue à l'intérieur du contrôleur de vue, en remplaçant son '.voir ' propriété, alors tout fonctionne comme prévu, et le textView remplit son 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];

J'ai essayé les deux morceaux de code dans tous ces initialiseurs / méthodes,et la même situation se produit dans tous les cas:

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

Je me rends compte que réinstantiant le'.vue ' du {[7] } est fugly, quelqu'un peut-il expliquer ce que je fais mal? J'ai supposé que je pouvais surmonter le problème en ayant un code de réglage de trame initial dans mon UIViewController pour redimensionner le UITextView Une fois, et par la suite autoresizing fonctionnerait comme souhaité.

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

... mais apparemment la vue.cadre n'est pas définie à ce stade, il n'a pas de son.size ' valeurs définies, donc encore une fois textView reste petit.

Quelle est la bonne façon de réaliser ce que je veux? Dois-je spécifier explicitement les dimensions en plein écran via UITextView:initWithFrame pour le faire remplir son superview?

Je vous serais reconnaissant pour tous les conseils que vous pouvez offrir.

36
demandé sur Alex Cio 2011-02-07 14:33:15

2 réponses

Autoresizing ne signifie pas que la sous-vue prendra la taille de sa superview. Cela signifie simplement qu'il va se redimensionner par rapport au changement de taille de son superview chaque fois que les limites du superview changent. Si au départ, vous devez définir la taille de la sous-vue à la valeur correcte. Le masque autoresizing traitera ensuite les changements de taille à l'avenir.

C'est tout Ce dont vous avez besoin:

textView = [[[UITextView alloc] autorelease] initWithFrame:self.view.bounds];
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|
                              UIViewAutoresizingFlexibleHeight];
89
répondu Ole Begemann 2016-01-06 14:25:15

Et ici Swift 3 solution:

myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
0
répondu Philippe H. Regenass 2017-04-19 08:06:06