J'ai installé 4.2 iphone sdk aujourd'hui et j'ai exécuté mon projet (qui est écrit en 4.0) avec 4.2. J'ai remarqué que les éléments de la barre d'outils sont égarés sur la barre d'outils, à la fois dans les simulateurs ipad, iphone. Y a-t-il quelqu'un d'autre que moi qui a rencontré ça? Voici le code:iphone sdk 4.2: Les UIBarButtonItem sont égarés sur UIToolbar
@define TOOLBAR_HEIGHT 34
@define TOOLBAR_ITEM_WIDTH 90
// extends UIView
@implementation MapViewControllerContainer
- (void) setFrame:(CGRect)frame
{
[super setFrame:frame];
if (self.subviews.count == 2)
{
((UIView *)[self.subviews objectAtIndex:0]).frame = CGRectMake(0, 0, frame.size.width, TOOLBAR_HEIGHT);
((UIView *)[self.subviews objectAtIndex:1]).frame = CGRectMake(0, TOOLBAR_HEIGHT, frame.size.width,
frame.size.height - TOOLBAR_HEIGHT);
}
}
@end
// extends UIViewController
@implementation MapViewController
- (void) loadView
{
self.view = [[MapViewControllerContainer alloc] init];
[self.view release];
UIToolbar * toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = UIBarStyleBlack;
UIBarButtonItem * flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil action:nil];
detailsButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Details",@"")
style:UIBarButtonItemStyleBordered target:self
action:@selector(detailsPressed)];
detailsButton.width = TOOLBAR_ITEM_WIDTH;
detailsButton.enabled = NO;
toolbar.items = [NSArray arrayWithObjects: flexibleItem, detailsButton, nil];
[flexibleItem release];
[detailsButton release];
[self.view addSubview:toolbar];
[toolbar release];
// More non-related code here
}
@end
Voici sa sortie:
output http://dl.dropbox.com/u/13741164/toolbar.jpg
Comme vous le voyez, détails bouton est hors du cadre par le côté droit. Le plus petit TOOLBAR_ITEM_WIDTH, plus il est à l'intérieur du cadre. Donc, je suppose qu'il y a un bug dans le calcul des éléments de la barre d'outils, car cela fonctionne merveilleusement dans 4.0 sdk, non? Merci de votre aide.
J'ai trouvé la solution. En 4.2, uitoolbar ne devrait pas être initialisé avec -init même si -setFrame est appelé plus tard, plutôt -initWithFrame devrait être utilisé avec une trame fictive qui est assez grande pour contenir tous les boutons. –