Problema con el layout automático en iOS 8 (el código funciona perfectamente en iOS 7)

Tengo una aplicación que se creó utilizando auto-layout y todo sigue funcionando como esperaba cuando lo ejecuto en mi dispositivo iOS 7, sin embargo, cuando lo ejecuto en un dispositivo con iOS 8, algunas de mis limitaciones son un tanto extrañas.

De hecho, experimenté un problema similar en otra aplicación, pero no fue un gran problema. Ahora, me estoy preguntando si se trata de un error en el SDK de iOS 8 o si hay una nueva forma de manejar el layout automático en iOS8 que no conozco.

Aquí está mi configuration: tengo una UIView con una UIImageView incrustada en su interior. Tanto la vista como la vista de image tienen restricciones que fijan sus bordes inferior, anterior y posterior a sus supervistas con constante = 0.

La UIView también tiene su borde superior fijado a su supervisión y tengo un IBOutlet conectado a la restricción para ajustarlo de manera programática. UIImageView tiene una cuarta restricción que fija su altura a la altura del dispositivo (en mi caso 568).

Aquí está el comportamiento que estoy esperando / logrando en iOS 7: estoy tratando de networkingucir la altura de la vista del contenedor y hacer que la parte superior de la vista de la image se corte sin el cambio en la relación de aspecto (tipo de apariencia que has recortado la parte superior de la image apagada) … es por eso que he fijado la altura de la vista de la image y el borde inferior.

Lo que realmente sucede en iOS8: la vista del contenedor se networkinguce según lo esperado (permanece clavado a los lados y al background y la altura se contrae). UIImageView comporta como si tuviera una restricción de espacio superior con cosntant == 0. En lugar de cortar la parte superior de la image, la image completa se contrae. Como tengo la image en el modo AspectFit , los lados se pellizcan también para mantener la relación de aspecto igual (pero la image de la image permanece fija en los bordes inicial, posterior e inferior como debería).

Cómo lo hago: tengo una notificación que dispara desde otra parte de mi código para ajustar la restricción de espacio superior conectada al IBOutlet. El método que llama es realmente bastante simple:

 - (void) setTopSpaceForContainerView:(NSNotification*) notif{ containerView_TopSpace.constant = [[notif.userInfo objectForKey:kTopSpace] intValue]; [self.view setNeedsUpdateConstraints]; [self.view setNeedsLayout]; } 

¿Alguien más tiene una experiencia similar? Estoy tratando de encontrar una solución, pero iOS 8 parece decidido a encoger mi image.

¡Gracias una tonelada!

Este es definitivamente un error de iOS 8. Pude setNeedsLayout enviando setNeedsLayout a la vista del contenedor (la vista de supervisión de la vista de la image).

Veo que estás enviando setNeedsLayout a self.view . Si ese código está en el controller de vista, creo que self.view no es la vista de contenedor. Intente enviar setNeedsLayout a la vista de contenedor directamente.

El proyecto de demostración está aquí.

introduzca la descripción de la imagen aquí

Intente usar UIViewContentModeScaleAspectFill y setClipsToBounds: NO