2010-12-01 5 views
0

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.

+0

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. –

Répondre

2

L'appel suivant résolu le problème pour moi:

[toolbar sizeToFit]; 
Questions connexes