El marco UIScrollView tiene un tamaño diferente en iOS 8 vs iOS 7

Implementé un controller de vista que simplemente muestra una sola image y permite que el usuario pellizque para acercar / acercar la image. Funciona muy bien en iOS 7, pero en iOS 8 el marco de la vista de desplazamiento es de un tamaño diferente, y el resultado final es que la image se amplía demasiado en el iPhone y se aleja demasiado del iPad cuando se ejecuta en iOS 8. Esto se debe a el ancho del marco de vista de desplazamiento es de 600pt, que es su tamaño en el guión gráfico (Universal Storyboard usando classs de tamaño). Pero tengo restricciones de reproducción automática que se supone que aseguran que la vista de desplazamiento se extienda para llenar el espacio disponible; debería ser 768pt en iPad. Ese es el caso en iOS 7 pero no en iOS 8.

Esta es la configuration: en Interface Builder, tengo un UIViewController que contiene una UIView que contiene un UIScrollView con autorizaciones de retardo de arrastre, el espacio principal, inferior y superior a la supervisión. Luego en viewDidLoad :

  UIImage *image = [UIImage imageNamed:@"image"]; self.imageView = [[UIImageView alloc] initWithImage:image]; self.imageView.contentMode = UIViewContentModeScaleAspectFit; self.imageView.frame = CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height); [self.scrollView addSubview:self.imageView]; self.scrollView.contentSize = image.size; #warning Bug here - scroll view frame is 600pt on iOS 8 - should be 768 for iPad NSLog(@"scroll view frame wid: %f", self.scrollView.frame.size.width); 

Descubrí si coloco el mismo NSLog en viewDidAppear el ancho del marco es correcto 768pt. Intenté mover ese código a viewWillAppear en lugar de viewDidLoad , pero obtuve el mismo resultado: también es 600 en viewWillAppear también. Entonces, la vista de desplazamiento se está estirando correctamente para llenar la pantalla, pero no hasta después de que aparezca en la pantalla. Necesito el tamaño de fotogtwig correcto antes de que la image aparezca en la pantalla para poder calcular los valores de zoom mínimo y máximo adecuados.

¿Qué puedo hacer para solucionarlo y garantizar que funcione para iOS 7 y 8?

Lo he resuelto. Por alguna razón, viewDidLoad está demasiado temprano en el ciclo de vida para get el marco ajustado de la vista de desplazamiento en iOS 8, pero de nuevo funciona en iOS 7. viewWillAppear también es demasiado temprano, así como viewWillLayoutSubviews .

Para resolver el problema, simplemente moví el código donde necesito usar el tamaño de marco de la vista de desplazamiento para viewDidLayoutSubviews que finalmente obtendrá el tamaño correcto que será cuando aparezca.

También estaba luchando mucho con un problema similar. Lo solucioné cambiando el ancho de la vista de contenido dentro de scrollview de manera progtwigda. En ViewDidLoad llamo a este método

 func setupWidthOfContentView(){ let screen = UIScreen.mainScreen().bounds // println("Width: \(screen.size.width) Height: \(screen.size.height)") var constW = NSLayoutConstraint(item: vwContentView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screen.size.width) vwContentView.addConstraint(constW) }