UIScrollView no respeta minimumZoomScale después de cambiar la subvista

Estoy encontrando un problema para get un UIScrollView para actualizar correctamente en respuesta a un cambio en la escala de zoom mínima.

La vista de desplazamiento tiene un UIImageView como una subvista, y la propiedad de la image de UIImageView se establece en respuesta al método didFinishPickingMediaWithInfo de UIPickerView:

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

Esto funciona correctamente la primera vez que se agrega una image con este método. Sin embargo, si este método se dispara de nuevo, incluso para agregar la misma image que la primera vez, la image posterior se muestra en tamaño completo en scrollView y no se puede networkingucir, solo se amplía.

He descargado zoomScale , zoomScale , minimumZoomScale y maximumZoomScale de scrollView en el logging, y son los mismos cada vez. El minimumZoomScale se calcula correctamente cada vez.

Es como si el scrollView estuviera siendo networkingibujado con un minimumZoomScale de 1.0, ignorando el hecho de que ha sido configurado explícitamente. ¿Hay algo obvio que me falta aquí?

El problema parece ser, no estoy seguro de si este comportamiento está documentado en algún lugar, restablecer el tamaño de contenido mientras la escala de zoom actual está configurada en algo distinto de 1.0.

La solución es simple: restablezca la propiedad zoomScale a 1.0 antes de configurar el nuevo tamaño de contenido:

 // 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