2011-03-29 13 views
7

Tengo una vista que contiene una subvista; esta subvista en sí misma contiene otra subvista, que debe ser un poco más pequeña que su supervista.¿Cómo hacer que una subvista cambie el tamaño automáticamente con su supervista?

Estoy creando la primera subcarpeta en tamaño de pantalla completa y luego la reduzco a un tamaño muy pequeño en la pantalla. Cuando se toca la subvista, la animo desde su pequeño tamaño hasta la pantalla completa.

El problema es que mi segunda subvista nunca se redimensiona durante esta animación, siempre se representa en tamaño completo y desborda los límites de su supervista.

¿Hay una manera simple de obtener una subvista para mantener el tamaño proporcionalmente a medida que su supervisor cambia de tamaño?

Respuesta

25

podría añadir el cambio de tamaño automático en el comportamiento mediante programación

Objective-C

subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

3.x Swift

subview.autoresizingMask = [.flexibleWidth, .flexibleHeight] 

2.x Swift

subview.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 

En Interface Builder navegar a la pestaña 3 y haga clic en las flechas en el medio; D

Otra solución podría ser la implementación de la setFrame método y siempre adaptarlo al tamaño de la supervista (no el frame.size dado). No te olvides de configurar el origen cuando lo necesites.

- (void) setFrame:(CGRect)frame 
{ 
    CGRect rect = self.superview.frame; 
    rect.origin.x = 0; 
    rect.origin.y = 0; 
    [super setFrame:rect]; 
} 
+0

Bueno, ya que esto es parte de la UIView, tratar UIKit 'import ' – Lepidopteron

+0

Bueno, eso funciona, pero no parece ser el cambio de tamaño subvista proporcionalmente. Si aumento el ancho de la supervista en un factor de 2, el ancho de la subvista aumenta en un factor de 4. ¿Hay alguna manera de hacer que la subvista mantenga su tamaño proporcional con respecto a la supervista? – MusiGenesis

+0

ha agregado una "Máscara" adicional a esas constantes. – MusiGenesis

5

esto hace el truco para mí

subview.frame = subview.superview.bounds; 
1

Si solamente va a utilizar [.flexibleWidth, .flexibleHeight] para su máscara de tamaño automático, su subvista no conseguirá cambiar de tamaño proporcionalmente. La respuesta correcta es:

autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleTopMargin, .flexibleLeftMargin, .flexibleBottomMargin, .flexibleRightMargin] 
Cuestiones relacionadas