2 votes

Mise à l'échelle automatique d'une UIView lors d'un changement d'orientation, afin de l'adapter proportionnellement à la vue parent.

A UIImage réglée sur "Aspect Fit", l'image sera automatiquement mise à l'échelle de manière dynamique afin de s'adapter aux limites actuelles de l'affichage de l UIUmageView tout en conservant les proportions de l'image. A UIView réglé sur "Aspect Fit" ne semble pas avoir le même effet sur ses vues secondaires.

J'ai essayé de définir la vue parent via le code, avec le code ci-dessous, et j'ai essayé plusieurs variations sur le masque de redimensionnement automatique (je n'utilise pas la mise en page automatique). Est-ce que je rate quelque chose d'évident ou dois-je écrire un petit code pour calculer la bonne échelle pour ma vue secondaire en fonction de la taille actuelle de la vue parent ?

[self.view setContentMode:UIViewContentModeScaleAspectFit];

6voto

jrturton Points 64875

Dans la documentation :

Le mode de contenu spécifie comment le bitmap en cache du calque de la vue est ajusté lorsque les limites de la vue changent.

Pour une vue d'image, il s'agit de parler de l'image. Pour une vue qui dessine son contenu, il s'agit du contenu dessiné. Cela fait no affectent la disposition des sous-vues.

Vous devez examiner les masques d'autoréduction en place sur le site Web de l'entreprise. sous-vues . Le mode de contenu est une fausse piste ici. Si vous ne pouvez pas obtenir la mise en page dont vous avez besoin en utilisant les masques de redimensionnement automatique, vous devez mettre en œuvre le mode de contenu. layoutSubviews et calculer manuellement les positions et les images de la sous-vue.

2voto

nvrtd frst Points 1903
  • Les modes de contenu n'affectent pas les sous-vues de la vue.
  • Vous utiliseriez des masques de redimensionnement automatique pour déterminer comment les sous-vues sont sont disposées.
  • Si cela n'est pas suffisant, vous pouvez mettre en place layoutSubviews

Référencé à partir de : https://stackoverflow.com/a/14111480/1374512

Autres informations utiles sur layoutSubviews : https://stackoverflow.com/a/5330162/1374512

1voto

Bhavin Points 12613

Que pensez-vous de ceci :

 self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

Ou vous pouvez essayer ceci :

// horizontal 
   childView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin |  UIViewAutoresizingFlexibleRightMargin;

// vertical 
   childView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

// both 
   childView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

Si vous voulez d'autres références, je pense que ce sont deux belles Questions :

1) Auto-redimensionnement programmatique des masques

2) UIView et AutoresizingMask ignorés

0voto

Mr Ordinary Points 4876

Je me suis amusé avec. Elle est incomplète, elle ne gère que la mise à l'échelle de la vue secondaire du portrait, mais elle fonctionne bien jusqu'à présent.

if (self.view.bounds.size.width < self.view.bounds.size.height) {
    NSLog(@"view is portrait");
    if (_sview.frame.size.width < _sview.frame.size.height) {
        NSLog(@"subview is portrait");
        [UIView animateWithDuration:0.1
                         animations:^{
                             _sview.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
                         }];
    } else {
        NSLog(@"subview is landscape");
    }
} else {
    NSLog(@"landscape");
    if (_sview.frame.size.width < _sview.frame.size.height) {
        [UIView animateWithDuration:0.1
                         animations:^{
                             _sview.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.65, 0.65);
                         }];
    } else {
        NSLog(@"subview is landscape");
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X