Lorsque j'ajoute une sous-vue à un UIView
, ou lorsque je redimensionne une sous-vue existante, je m'attendrais à ce que [view sizeToFit]
et [view sizeThatFits]
reflètent cette modification. Cependant, mon expérience est que sizeToFit
ne fait rien, et sizeThatFits
renvoie la même valeur avant et après le changement.J'ai du mal à faire en sorte que UIView sizeToFit fasse quelque chose de significatif
Mon projet de test a une seule vue contenant un seul bouton. Cliquer sur le bouton ajoute un autre bouton à la vue, puis appelle sizeToFit
dans la vue contenant. Les limites de la vue sont déversées sur la console avant et après l'ajout de la sous-vue.
- (void) logSizes {
NSLog(@"theView.bounds: %@", NSStringFromCGRect(theView.bounds));
NSLog(@"theView.sizeThatFits: %@", NSStringFromCGSize([theView sizeThatFits:CGSizeZero]));
}
- (void) buttonTouched {
[self logSizes];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(10.0f, 100.0f, 400.0f, 600.0f);
[theView addSubview:btn];
[theView sizeToFit];
[self performSelector:@selector(logSizes) withObject:nil afterDelay:1.0];
}
Et la sortie est:
2010-10-15 15:40:42.359 SizeToFit[14953:207] theView.bounds: {{0, 0}, {322, 240}}
2010-10-15 15:40:42.387 SizeToFit[14953:207] theView.sizeThatFits: {322, 240}
2010-10-15 15:40:43.389 SizeToFit[14953:207] theView.bounds: {{0, 0}, {322, 240}}
2010-10-15 15:40:43.391 SizeToFit[14953:207] theView.sizeThatFits: {322, 240}
Je dois manquer quelque chose.
Merci.
Merci Ole. Vous devriez avoir lu les documents de plus près plutôt que d'examiner les extraits de code qui reposaient sur le comportement surchargé dans une sous-classe particulière de UIView. – FishesCycle
Je suis surpris qu'il n'y ait pas de réponse ici qui partage leur implémentation d'un tel override. – aleclarson