2010-12-01 7 views
0

Ich habe 4.2 iphone sdk heute installiert und lief mein Projekt (das in 4.0 geschrieben wird) mit 4.2. Ich habe festgestellt, dass Toolbar Elemente über Toolbar, sowohl in iPad, iPhone Simulatoren verlegt werden. Gibt es noch jemanden anderen als mich, der damit konfrontiert wurde? Hier ist der Code:iphone sdk 4.2: UIBarButtonItems sind über UIToolbar verlegt

@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 

hier sein Ausgang ist:

output http://dl.dropbox.com/u/13741164/toolbar.jpg

Wie Sie sehen, Schaltfläche Details aus dem Rahmen ist von der rechten Seite. Je kleiner TOOLBAR_ITEM_WIDTH ist, desto mehr befindet es sich innerhalb des Frames. Ich nehme an, es gibt einen Fehler in der Berechnung von Toolbar-Elementen, weil es wunderbar in 4.0 SDK funktioniert, oder? Danke für Ihre Hilfe.

+0

ich die Lösung gefunden. In 4.2 sollte uitoolbar nicht mit -init initialisiert werden, auch wenn -setFrame später aufgerufen wird, stattdessen sollte -initWithFrame mit einem Dummy-Rahmen verwendet werden, der groß genug ist, um alle Schaltflächen zu enthalten. –

Antwort

2

Der Aufruf folgende Fest das Problem für mich:

[toolbar sizeToFit];