Cómo combinar las restricciones de layout automático con la propiedad contentMode de UIView

Tengo un object UIImageView configurado con layout automático. He creado restricciones para que la vista mantenga una distancia constante a su supervisión. En formatting visual, sería como:

 @"V:|-[imageView]-|" @"H:|-[imageView]-|" 

Pero también me gustaría mantener la relación de aspecto de la image subyacente, por lo que he asignado UIViewContentModeScaleAspectFit a UIViewContentModeScaleAspectFit .

Pensé que todo funcionaba bien hasta que establecí el valor cornerRadius del CALayer asociado:

 self.imageView.layer.cornerRadius = 7; self.imageView.layer.maskToBounds = YES; 

Ahora cuando se cambia el tamaño de la vista de la image, por ejemplo, debido a un cambio en la orientación, las esquinas networkingondeadas se pierden dependiendo del nuevo tamaño que obtenga la vista. La razón es que cornerRadius aplica a UIImageView (cuadro en guiones abajo), pero como la image subyacente también se cambia de tamaño para respetar contentMode (cuadro en asteriscos abajo), las esquinas networkingondeadas ya no son visibles:

 -------------------------- | ********** | | * * | | * * | | * * | | ********** | -------------------------- 

¿Hay alguna forma de evitar este comportamiento?

como dijo @ jacob-k, debe agregar a su subclass de celda las layoutSubviews , pero solo para agregar debe llamar primero a layoutIfNeeded .

Ejemplo:

 - (void)layoutSubviews { [super layoutSubviews]; [self layoutIfNeeded]; imageView.layer.cornerRadius = imageView.frame.size.width / 2; } 

Si no llamará layoutIfNeeded primero, entonces aplicará todos los cambios sin sus restricciones establecidas.

Una forma rápida de hacerlo podría ser subclass UIImageView y establecer el radio de la esquina en layoutSubviews .