2010-08-17 5 views
3

Dans une vue contenant plusieurs sous-vues, l'une des sous-vues doit rester une distance fixe, non nulle, entre le haut et le bas de la vue d'ensemble. Dans ces images, ce point de vue est en gris:autoresizing Masque pour les tailles de marge fixes

Portait

Landscape

Selon la documentation, ce point de vue doit avoir un masque de UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth. Cependant, cela amène la vue à augmenter sa hauteur pour prendre en charge l'ensemble de la vue globale. Comment la vue peut-elle être contenue dans des marges fixes mais non nuls? Merci.

+0

question rapide, le travail de redimensionnement de largeur? –

+0

Oui. Seule la hauteur est problématique. –

+0

À quoi correspond le masque d'autoresizing sur l'aperçu? En outre, définissez-vous le masque dans IB ou dans le code? –

Répondre

2

UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth devrait fonctionner.

Cependant, il y a un bug avec le dimensionnement automatique UIView lorsque la hauteur/largeur de la vue parent devient petite (et tout se casse quand elle devient zéro) — il se peut que UIView height/width ne devienne pas négatif.

J'ai rencontré ce problème lors de l'exécution de initWithFrame: CGRectZero; cela peut aussi arriver si vous utilisez quelque chose comme subview.frame = self.bounds lorsque self.bounds est CGRectZero (ou petit).

Ma méthode de débogage bruteforce serait de surcharger setFrame: et setBounds: pour ajouter un NSLog.

+0

Merci pour la suggestion. Bizarrement, si je crée une catégorie avec setBounds sur UIView, et que j'appelle super, j'obtiens, "- [UIView setBounds:]: sélecteur non reconnu". Une idée de pourquoi cela serait? –

+0

Parce qu'une catégorie n'est pas une sous-classe. Boy, c'était dense. –

+0

Pour "base-calling" dans une catégorie, voir http://stackoverflow.com/questions/3487828/if-i-override-a-class-method-is-there-a-way-i-can-call- la-méthode-originale-le/3490215 # 3490215 –

Questions connexes