更改子视图后UIScrollView的不尊重minimumZoomScale(UIScrollVie

2019-09-17 05:39发布

我打得到一个UIScrollView响应于最小缩放比例的变化正确更新的问题。

滚动视图具有一个UIImageView作为一个子视图,和的UIImageView的图像特性是响应于UIPickerView的didFinishPickingMediaWithInfo方法设置:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *takenImage = [info objectForKey:UIImagePickerControllerOriginalImage];

    [self.imageView setImage:takenImage];
    [self.imageView setFrame:CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, takenImage.size.width, takenImage.size.height)];

    [self.scrollView setContentSize:CGSizeMake(takenImage.size.width, takenImage.size.height)];

    [self.scrollView setMinimumZoomScale:[self.scrollView frame].size.width / takenImage.size.width];
    [self.scrollView setMaximumZoomScale:2.0];
    [self.scrollView setZoomScale:[self.scrollView minimumZoomScale] animated:YES];

    [self dismissModalViewControllerAnimated:YES];        

}

此正常工作的第一次的图像使用此方法加入。 然而,如果这种方法被再次触发 - 即使是相同的图像添加为第一次 - 随后的图像在滚动视图全尺寸显示,而不能缩小 - 只有在放大。

我甩了contentSizezoomScaleminimumZoomScalemaximumZoomScale的滚动型到日志中,他们每次都相同。 所述minimumZoomScale正在每次正确地计算出。

这是因为如果正在使用重绘滚动视图minimumZoomScale 1.0,无视它已经明确设置的事实。 有什么明显的是,我在这里失踪?

Answer 1:

这个问题似乎是 - 不知道这种行为记录的地方 - 而目前的缩放比例设置为1.0之外的东西重置内容的大小。

解决方法是简单的:重置zoomScale设置新的内容大小财产为1.0:

// See http://stackoverflow.com/questions/10586577
// first reset before new content size
scroller.zoomScale = 1.0f;
// set new content size
scroller.contentSize = newImage.size;
// ... adjust minimum/maximum zoom scales if needed


文章来源: UIScrollView not respecting minimumZoomScale after changing the subview