Pregunta

I mediante programación creado una vista de usuario y una vista de tabla.

Bajo ciertas circunstancias que no puedo reproducir no producirse algunos errores visuales extraños:

  • texto con algunas letras que tienen un tamaño de fuente diferente a los demás
  • Un botón en que no se muestra inicialmente la frontera, pero sólo si hace clic en él. En el mismo caso, el borde del botón se puede mostrar en un UITextField en lugar del marcador de posición (ver captura de pantalla)
  • una etiqueta que muestra arriba no en el lugar correcto, pero en el campo de texto mencionado anteriormente, al revés (i no arreglo para captura de pantalla éste aún)

A continuación, he añadido dos capturas de pantalla con la mayor parte de la aplicación a oscuras, sólo se muestran los errores:

http://uppix.net/b/c/4/dd1e41acb94b7d0ad8eb173772e97.png http://uppix.net/b/f/2/a5993440c07753b851701068330be.png

Aquí se puede ver que el texto se mezcla con diferentes tamaños de fuente.

Este errores no ocurren con regularidad o se reproducen factible.

I añadido el código de la pantalla de inicio de sesión a continuación:

 // Implement loadView to create a view hierarchy programmatically, without 
 // using a nib.
     - (void)loadView {
     UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
     UIFont* font = [UIFont systemFontOfSize:14];

 float midLine = 100.0;
 float height = 30.0;
 float borderY = 70.0;
 float borderX = 10.0;
 float width = 320.0 - borderX * 2.0;
 float paddingX = 10.0;
 float paddingY = 5.0;

 CGRect usernameLabelRect = CGRectMake(borderX, borderY, midLine, height);
 CGRect usernameFieldRect = CGRectMake(borderX + midLine + paddingX, borderY, 
                               width - midLine - paddingX - 40 , height);

 CGRect passwordLabelRect = CGRectMake(borderX, borderY + height + paddingY,
                               midLine, height);
 CGRect passwordFieldRect = CGRectMake(borderX + midLine + paddingX, 
                               borderY + height + paddingY, 
                               width - midLine - paddingX - 40, height);

 CGRect loginButtonRect = CGRectMake(borderX + 40, 
                               borderY + height*2 + paddingY*2, width - 80, 
                               height);

 //CGRect warningRect =  CGRectMake(borderX,
 //                         borderY * height * 3.0 + paddingY *3.0, 
 //                         width, height);
 CGRect warningRect =  CGRectMake(borderX, 175, width, 40);

 UILabel* usernameLabel = [[UILabel alloc] initWithFrame:usernameLabelRect];

 usernameLabel.textAlignment = UITextAlignmentRight;
 usernameLabel.font = font;
 usernameLabel.text = @"Username:";

 UILabel* passwordLabel = [[UILabel alloc] initWithFrame:passwordLabelRect];
 passwordLabel.textAlignment = UITextAlignmentRight;
 passwordLabel.font = font;
 passwordLabel.text = @"Password:";


 usernameField = [[UITextField alloc] initWithFrame:usernameFieldRect];
 [usernameField setBorderStyle:UITextBorderStyleRoundedRect];
 //[usernameField setPlaceholder:@"<Username>"];
 usernameField.font = font;
 usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone;
 usernameField.autocorrectionType = UITextAutocorrectionTypeNo;

 passwordField = [[UITextField alloc] initWithFrame:passwordFieldRect];
 passwordField.font = font;
 [passwordField setBorderStyle:UITextBorderStyleRoundedRect];
 //[passwordField setPlaceholder:@"<Password>"];
 passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone;
 passwordField.autocorrectionType = UITextAutocorrectionTypeNo;
 passwordField.secureTextEntry = YES;

 loginButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 loginButton.frame = loginButtonRect;
 [loginButton setTitle: @"Einloggen" forState:UIControlStateNormal];
 [loginButton setTitleColor:[UIColor blackColor]
                                    forState:UIControlEventTouchDown];
 loginButton.contentVerticalAlignment =
                                    UIControlContentVerticalAlignmentCenter;
 loginButton.contentHorizontalAlignment =
                                    UIControlContentHorizontalAlignmentCenter;
 [loginButton addTarget:self action:@selector(OnLoginClicked:)
                          forControlEvents:UIControlEventTouchUpInside];
 [loginButton setBackgroundColor:[UIColor clearColor]];

 warningLabel = [[UILabel alloc] initWithFrame:warningRect];
 warningLabel.font = font;
 warningLabel.numberOfLines = 3;
 warningLabel.text =
 @"Wenn Sie die Applikation jetzt schließen, so werden Ihre Logindaten verworfen.";

 [myView addSubview:usernameLabel];
 [myView addSubview:passwordLabel];
 [myView addSubview:usernameField];
 [myView addSubview:passwordField];
 [myView addSubview:loginButton];
 [myView addSubview:warningLabel];
 /*
 [usernameLabel release];
 [passwordLabel release];
 [usernameField release];
 [passwordField release];
 [loginButton release];
 [warningLabel release];
 */
 self.view = myView;
 [myView release];
}
¿Fue útil?

Solución 2

El problema fue que me llamaron mensajes UIKit de No-La-Main-Thread, que causa todo tipo de problemas gráficos. Resuelto mediante el uso de performSelectorOnMainThread: en varios lugares en mi código =)

Otros consejos

No puedo trabajar toda su posicionamiento de la pantalla en mi cabeza, pero me parece que muchos de sus campos se superponen: es intencional? Tal vez esa es la causa? Normalmente crear vistas en código, pero esto podría ser un caso de IB!

No ha mostrado ningún código para la vista de tabla, sin embargo parece que he problemas similares antes de donde se agrega subvistas a una célula, entonces la próxima vez que la célula se quita de la cola con DequeueReusableCell agrega subvistas nuevo sin comprobar si están allí o la limpieza de ellos. Esto da lugar a todo tipo de superposiciones al igual que la primera pantalla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top