J'ai un problème lors de l'utilisation de addSubview.
Exemple de code:
ParentView *myParentView = [[ParentView alloc] initWithNibName:@"ParentView " bundle:nil];
ChildeView *myChildeView = [[ChildeView alloc] initWithNibName:@"ChildeView" bundle:nil];
//... parent frame resized with setFrame lets say to x:0, y:0, W:320, H:411
[[myParentView view] addSubview: [myChildeView view]];
Mon enfant, une fois ajouté, est plus grand que le parent et ne redimensionne pas son cadre en fonction des limites du parent. Je ne peux pas utiliser "Clip Subviews" sur le parent, et "Autoresize Subviews" semble ne pas fonctionner si le cadre parent n'est pas redimensionné à nouveau. Existe-t-il une propriété qui permet à une sous-vue de redimensionner automatiquement en fonction des limites de son parent sans utiliser setFrame sur chaque enfant?
Si vous n’utilisez pas la disposition automatique, avez-vous essayé de définir le masque de redimensionnement automatique de la vue enfant? Essaye ça:
myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
En outre, vous devrez peut-être appeler
myParentView.autoresizesSubviews = YES;
pour que la vue parent redimensionne automatiquement ses sous-vues lorsque son cadre change.
Si vous voyez toujours la vue enfant dessinée en dehors du cadre de la vue parent, il y a de fortes chances que la vue parent ne coupe pas son contenu. Pour résoudre ce problème, appelez
myParentView.clipsToBounds = YES;
Copiez simplement le cadre de la vue parent dans la vue enfant puis ajoutez-le. Après que le redimensionnement automatique fonctionnera. En fait, vous ne devez copier que la taille CGRectMake (0, 0, parentView.frame.size.width, parentView.frame.size.height)
childView.frame = CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height);
[parentView addSubview:childView];
Testé dans Xcode 9.4, Swift 4 Une autre façon de résoudre ce problème est, vous pouvez ajouter
override func layoutSubviews() {
self.frame = (self.superview?.bounds)!
}
dans la classe sous-vue.
c'est tout ce dont vous avez besoin
childView.frame = parentView.bounds
Vous pouvez toujours le faire dans votre méthode UIViews - (void)didMoveToSuperview
. Il sera appelé lors de l'ajout ou de la suppression de votre parent (nil lors de son retrait). À ce moment-là, définissez simplement votre taille sur celle de votre parent. À partir de ce moment, le masque de redimensionnement automatique devrait fonctionner correctement.