2011-08-30 15 views
9

Cuando cambio la orientación, mi vista de texto cambia de tamaño incorrectamente, los límites saltan a la derecha o a la izquierda o hacia abajo o hacia arriba ... aquí está mi código, ayuda por favor ... ¿Cómo puedo cambiar el tamaño de mi texto completo UIView ... gracias¿Cómo cambiar el tamaño de UIView correctamente al cambiar de orientación?

- (void)viewDidLoad 
{ frameHor=CGRectMake(0,10,275,306); 
    frameVer=CGRectMake(0, 51, 320, 351); 
.. 
} 



- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){ 
     //self.view = portraitView; 
     [self changeTheViewToPortrait:YES andDuration:duration]; 

    } 
    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){ 
     //self.view = landscapeView; 
     [self changeTheViewToPortrait:NO andDuration:duration]; 
    } 
} 

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

- (void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration { 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:duration]; 

    if(portrait){ 

     self.titleLabel.hidden=NO; 
     self.backButton.hidden=NO; 
     [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"det.png"]]]; 
     self.fullText.frame=CGRectMake(frameVer.origin.x, frameVer.origin.y, frameVer.size.width, frameVer.size.height); 



    } 
    else{ 

     self.titleLabel.hidden=YES; 
     self.backButton.hidden=YES; 

     self.fullText.frame=CGRectMake(frameHor.origin.x, frameHor.origin.y, frameHor.size.width, frameHor.size.height); 
     [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"T_iphoneauto.png"]]]; 




    } 

    [UIView commitAnimations]; 
} 

Respuesta

19

Puede usar la propiedad autoresizingMask de su UIView. Por ejemplo:

blackView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | 
           UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | 
           UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; 

De la documentación IOS:

Discusión Cuando los límites de un cambio de vista, ese punto de vista cambia automáticamente el tamaño de sus subvistas acuerdo con máscara de tamaño automático de cada subvista. Especifique el valor de esta máscara combinando las constantes descritas en UIViewAutoresizing utilizando el operador C bitwise OR. La combinación de estas constantes le permite especificar qué dimensiones de la vista deberían crecer o reducirse en relación con la supervista. El valor predeterminado de esta propiedad es UIViewAutoresizingNone, que indica que la vista no debe cambiar de tamaño en absoluto.

Cuando se establece más de una opción en el mismo eje, el comportamiento predeterminado es distribuir la diferencia de tamaño proporcionalmente entre las partes flexibles. Cuanto mayor es la parte flexible, en relación con las otras partes flexibles, más probable es que crezca. Por ejemplo, supongamos que esta propiedad incluye las constantes UIViewAutoresizingFlexibleWidth y UIViewAutoresizingFlexibleRightMargin pero no incluye la constante UIViewAutoresizingFlexibleLeftMargin, indicando así que la anchura del margen izquierdo de la vista es fijo, sino que el ancho de la vista y el margen derecho puede cambiar. Por lo tanto, la vista aparece anclada al lado izquierdo de su supervista mientras aumentan tanto el ancho de vista como el espacio a la derecha de la vista.

Si los comportamientos de conversión automática no ofrecen el diseño preciso que necesita para sus vistas, puede usar una vista de contenedor personalizada y anular su método layoutSubviews para posicionar sus subvistas con mayor precisión.

Para más información mira aquí: UIView class reference

+0

Sí, gracias, entiendo trucos autoresizingMask pero cuando en paisaje escondo algunos puntos de vista y debería levantar TextView ... si no encuentro nada mejor, se detendrá en AutoResizingMask –

+0

Puede cambiar su propiedad central o simplemente cambiar el cuadro cuando tenga otro modo de visualización. – Nekto

Cuestiones relacionadas