2012-04-12 5 views
0

Ich habe eine Unterklasse UINavigationBar, wo ich DrawRect überschreiben, um ein PNG mit Transparenz als Hintergrund zu bieten. Alles funktioniert wie erwartet, abgesehen von einem 1 Pixel großen Feld oben in der Leiste (ich kann die darunterliegende Karte im Raum bewegen).Benutzerdefinierte UINavigationBar ist um 1 Pixel an der Spitze

screen shot

Das Einzige, was ich finden konnte, ist diese Frage, die wie mein Problem klingt, aber ich weiß nicht, was die Erklärung zu machen: Empty space of 1 pixel above UINavigationBar

ich überprüft habe, dass die PNG-Datei tut nicht 1 Pixel Transparenz am oberen Rand des Bildes.
Zwingende in subclassed UINavigationBar:

- (void)drawRect:(CGRect)rect { 

[_bg drawInRect:CGRectMake(0, 0, _bg.size.width, _bg.size.height)]; 
// showing correct bounds - drawRect: 0.000000, 0.000000, 320.000000, 85.000000 
NSLog(@"drawRect: %f, %f, %f, %f", rect.origin.x, 
            rect.origin.y, 
            rect.size.width, 
            rect.size.height); 

}

- (CGSize)sizeThatFits:(CGSize)size { 
CGRect frame = [[UIScreen mainScreen] applicationFrame]; 
CGSize sz = CGSizeMake(frame.size.width, _bg.size.height); 
NSLog(@"sizefits"); 
return sz; 

}

Vielen Dank für jede Hilfe!

+0

Haben Sie ein 24/32bit PNG-Bild oder ein 8bit One? –

+0

Hallo Er, danke für die Antwort. Ich habe es verifiziert, und es ist 32-Bit. Irgendwelche Ideen? – Matt

Antwort

0

Ich hatte das gleiche Problem mit meiner benutzerdefinierten Navigationsleiste, obwohl ich UIAppearance Proxys verwendet, um ein benutzerdefiniertes Hintergrundbild anstelle von drawRect: zu setzen. Das war meine schnelle Lösung, in viewWillAppear: auf der root view controller:

// Make sure nav bar is flush with status bar (iOS 5 iPhone portrait somehow gives status bar height 20 and nav bar y 20.5, so we miss a pixel). 
CGRect navBarFrame = self.navigationController.navigationBar.frame; 
navBarFrame.origin.y = [UIApplication sharedApplication].statusBarFrame.size.height; 
self.navigationController.navigationBar.frame = navBarFrame; 
Verwandte Themen