J'ai créé par programmation une vue de connexion et une vue de table.Bogues graphiques lors de la création par programme de UILabel, UITextField, etc.
Dans certaines circonstances que je ne peux pas reproduire il se produire quelques bugs visuels étranges:
- texte avec quelques lettres ayant une taille de police différente que d'autres
- Un bouton où la frontière est pas initialement indiqué, mais seulement si vous cliquez dessus. Dans le même cas, la bordure du bouton peut être montrée dans un UITextField au lieu de la placeholder (voir capture d'écran)
- Une étiquette apparaissant pas au bon endroit, mais dans le champ de texte mentionné ci-dessus, à l'envers (j'ai fait parvient pas à capture d'écran celui encore)
ci-dessous, j'ai ajouté deux captures d'écran avec la plupart de l'application noircies, ne montrant que les bugs:
http://uppix.net/b/c/4/dd1e41acb94b7d0ad8eb173772e97.png http://uppix.net/b/f/2/a5993440c07753b851701068330be.png
H Vous pouvez voir que le texte est mélangé avec différentes tailles de police.
Ces erreurs ne se produisent pas régulièrement ou sont reproductibles.
J'ai ajouté le code de l'écran de connexion ci-dessous:
// 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];
}
ici est une autre capture d'écran: http://uppix.net/b/f/2/a5993440c07753b851701068330be.png Comme vous pouvez le voir, le bouton "Einloggen" n'a aucun bouton montré dans ce cas. Habituellement, il a. Vous pouvez également voir l'espace réservé du nom d'utilisateur-Label pour afficher la "bordure" à la place de son espace réservé réel – Tomen
L'écran de connexion que vous avez publié est un excellent exemple de l'utilisation d'Interface Builder. Vous ne faites que placer des contrôles et paramétrer beaucoup de propriétés qui auraient pu être traitées par Interface Builder. Faire un Xib séparé pour la vue de connexion et le charger au besoin, est la voie à suivre. La configuration de votre vue dans le code est source d'erreurs et beaucoup plus visuelle. Il est plus facile de repérer les problèmes en raison des chevauchements des commandes et autres. Pourquoi avez-vous besoin de configurer ceci en code? –