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.
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];
Et ici Swift 3 solution:
myView.autoresizingMask = [.flexibleWidth, .flexibleHeight]