2010-07-21 96 views
0

我有一个包含地图列表的UITableView。选择某个项目时,将在主窗口中添加一个新的子视图,并显示该地图。在我的地图视图控制器查看下面的方法获取每个显示时称为:每次UIScrollView高度变化

- (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;} 

一个新的UIImageView添加到的UIScrollView并在视图中消失了的UIImageView被删除。计算zoomScale以便根据纵横比来匹配图像。

现在,我第一次点击一个项目时,一切正常,地图图像填充UIScrollView的全部高度,但下次单击某个项目时,UIScrollView的高度会更小。我还应该注意到,主窗口包含一个标签栏。

所以现在我的问题:

  • 的UIScrollView中如何可以改变它的大小呢?
  • 是否有任何其他动态的方式来检索targetHeight?

在此先感谢!

回答

0

好吧,我设法找到了一个解决方案我的自我,也许不是最好的,但它是动态的,它的工作原理。

但我仍然不明白为什么UIScrollView的高度会改变。如果有人知道为什么请评论。

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

你可能已经想通了,我只是把我的想法放在这里。正如我想可能是因为你改变scrollView的zoomScale的高度得到改变,并在所有情况下,它变得越来越小:) – 2012-11-01 07:13:02

1

我有类似的问题。事实证明,问题在于我为UIViewController的主视图划分UIScrollView,并且UIViewController对滚动视图的正确大小有自己的想法。

我通过使主视图子类UIView,而不是UIScrollView,再加入UIScrollView* content_view到视图,并加入我的子视图content_view而不是self固定它。

不知道这是否对你有帮助,但是...