solo - Problema con el diseño automático en iOS 8(el código funciona perfectamente en iOS 7)
el brillo de mi iphone 7 se baja solo (2)
Tengo una aplicación que se construyó usando auto-layout
y todo sigue funcionando como esperaba cuando lo ejecuto en mi dispositivo con iOS 7, sin embargo, cuando lo ejecuto en un dispositivo con iOS 8, algunas de mis limitaciones se vuelven un poco extravagantes.
De hecho, experimenté un problema similar en otra aplicación, pero no fue un gran problema. Ahora, estoy empezando a preguntarme si es un error en el SDK de iOS 8 o si hay una nueva forma de manejar el diseño automático en iOS8 que no conozco.
Aquí está mi configuración: tengo una UIView
con un UIImageView
incrustado en su interior. Tanto la vista como la vista de imagen tienen restricciones que fijan su parte inferior, los bordes anteriores y posteriores a sus supervistas con constante = 0.
UIView
también tiene su borde superior en su supervista y tengo un IBOutlet conectado a la restricción para ajustarlo programáticamente. El UIImageView
tiene una cuarta restricción que fija su altura a la altura del dispositivo (en mi caso, 568).
Este es el comportamiento que estoy esperando / logrando en iOS 7: estoy tratando de reducir la altura de la vista del contenedor y cortar la parte superior de la vista de la imagen sin que cambie la relación de aspecto (algo así como lo que recortó la parte superior de la imagen está desactivada) ... es por eso que he anclado la altura de la vista de la imagen y el borde inferior.
Lo que realmente sucede en iOS8: la vista del contenedor se contrae como se esperaba (permanece fijada a los lados y abajo y la altura se reduce). UIImageView
comporta como si tuviera una restricción de espacio superior con cosntant == 0. En lugar de cortar la parte superior de la imagen, la imagen entera se contrae. Como tengo la imagen en modo AspectFit
, los lados también se AspectFit
para mantener la relación de aspecto igual (pero el propio ImageView permanece fijado a los bordes anterior, 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 a 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 reducir mi imagen.
¡Gracias una tonelada!
Intente utilizar UIViewContentModeScaleAspectFill y setClipsToBounds: NO
Esto es definitivamente un error de iOS 8. Pude setNeedsLayout
enviando setNeedsLayout
a la vista de contenedor (la supervista de la vista de imagen).
Veo que estás enviando setNeedsLayout
a self.view
. Si ese código está en su controlador de vista, entonces supongo que self.view
no es la vista de contenedor. Intenta enviar setNeedsLayout
a la vista del contenedor directamente.