2010-07-21 3 views
0

J'ai un UITableView contenant une liste de cartes. Lorsqu'un élément est sélectionné, une nouvelle sous-vue est ajoutée à la fenêtre principale et la carte est affichée. Dans mon contrôleur de vue pour voir la carte voir la méthode suivante est appelée à chaque fois qu'il est affiché:UIScrollView changement de hauteur

- (void)showMap { 
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:mapImage]]; 

float imageHeight = tempImageView.image.size.height; 
float targetHeight = scrollView.frame.size.height - mapNavigationController.navigationBar.frame.size.height; 

scrollView.contentSize = tempImageView.image.size; 
scrollView.maximumZoomScale = 1.0; 
scrollView.minimumZoomScale = targetHeight/imageHeight; 
scrollView.clipsToBounds = YES; 

self.imageView = tempImageView; 
[tempImageView release]; 

[scrollView addSubview:imageView]; 
scrollView.zoomScale = scrollView.minimumZoomScale;} 

Un nouveau UIImageView est ajouté à chaque fois à la UIScrollView et lorsque la vue disparaît le UIImageView est supprimé. Le zoomScale est calculé pour que l'image corresponde au rapport d'aspect.

Maintenant, à mon problème, la première fois qu'un élément est cliqué, tout fonctionne correctement et l'image de carte remplit toute la hauteur de UIScrollView, mais la prochaine fois qu'un élément est cliqué, la hauteur de UIScrollView est plus petite. Je dois également noter que la fenêtre principale contient une barre d'onglets.

Alors maintenant à mes questions:

  • Comment changer le UIScrollView sa taille?
  • Et existe-t-il un autre moyen dynamique de récupérer le targetHeight?

Merci d'avance!

Répondre

0

Ok, j'ai réussi à trouver une solution moi-même, peut-être pas la meilleure mais c'est dynamique et ça marche.

Mais je ne comprends toujours pas pourquoi la hauteur de UIScrollView changerait. Si quelqu'un sait pourquoi, veuillez commenter.

NSInteger scrollViewHeight = 0; 

- (void)showMap { 
    if (scrollViewHeight == 0) { 
     scrollViewHeight = scrollView.frame.size.height; 
    } else { 
     scrollView.frame.size.height = scrollViewHeight; 
    } 

    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:mapImage]]; 

    float imageWidth = tempImageView.image.size.width; 
    float imageHeight = tempImageView.image.size.height; 
    float targetWidth = scrollView.frame.size.width; 
    float targetHeight = scrollViewHeight - mapNavigationController.navigationBar.frame.size.height; 
    float scale = targetHeight/imageHeight; 

    if (scale * imageWidth < targetWidth) { 
     scale = targetWidth/imageWidth; 
    } 

    scrollView.contentSize = tempImageView.image.size; 
    scrollView.maximumZoomScale = 1.0; 
    scrollView.minimumZoomScale = scale; 
    scrollView.clipsToBounds = YES; 

    self.imageView = tempImageView; 
    [tempImageView release]; 

    [scrollView addSubview:imageView]; 
    scrollView.zoomScale = scale;} 
} 
+0

mai vous avez pensé à elle déjà, je viens de mettre ma pensée ici. Comme je pensais que c'est peut-être parce que vous changez le zoomScale du scrollView la hauteur est changée et dans tous les cas il devient de plus en plus petit :) –

1

J'avais un problème similaire. Il s'est avéré que le problème était que j'étais sous-classe UIScrollView pour la vue principale de mon UIViewController, et le UIViewController avait ses propres idées sur la taille correcte de la vue de défilement.

Je l'ai fixé en faisant la vue principale sous-classe UIView plutôt que UIScrollView, puis en ajoutant un UIScrollView* content_view à la vue, et en ajoutant mes subviews à content_view plutôt que de self.

Je ne sais pas si cela vous aide ou non, mais ...

Questions connexes