12

Ich möchte die obere rechte und linke obere Ecke der UINavigationBar abrunden.UINavigationBar Abgerundete zwei Ecken

Ich weiß, dass es Funktionen zum Ändern der Ansichten Eckenradius gibt, aber ist es möglich, etwas Ähnliches wie die Standard UINavigationBar zu tun?

Wenn Sie nicht wissen, was ich meine Besuche dies:

Dank!

+0

ist es möglich, Ansicht Ecke Radio zu ändern, aber es wird alle Ecken betreffen! –

Antwort

10

Der beste Weg besteht darin, drawRect in der UINavigationBar zu überschreiben und ein benutzerdefiniertes Bild zu verwenden.

+0

-drawRect: wird nicht in iOS 5 aufgerufen - siehe http://stackoverflow.com/questions/5575821/custom-nav-bar-styling-ios/6389991#6389991 –

+0

Danke für die Aktualisierung dieser. Ich sollte hoffen, dass heute jeder über das UIAppearance-Protokoll informiert wird. –

44

der folgende Code funktioniert für mich (getestet auf iOS5). Der folgende Code rundet die oberen linken/rechten Ecken der Hauptnavigationsleiste ab. Darüber hinaus fügt es einen Schatten hinzu:

CALayer *capa = [self.navigationController navigationBar].layer; 
[capa setShadowColor: [[UIColor blackColor] CGColor]]; 
[capa setShadowOpacity:0.85f]; 
[capa setShadowOffset: CGSizeMake(0.0f, 1.5f)]; 
[capa setShadowRadius:2.0f]; 
[capa setShouldRasterize:YES]; 


//Round 
CGRect bounds = capa.bounds; 
bounds.size.height += 10.0f; //I'm reserving enough room for the shadow 
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds 
               byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) 
                cornerRadii:CGSizeMake(10.0, 10.0)]; 

CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
maskLayer.frame = bounds; 
maskLayer.path = maskPath.CGPath; 

[capa addSublayer:maskLayer]; 
capa.mask = maskLayer; 
+0

@Joze funktioniert es wie ein Zauber, aber mein UIButton back stop funktioniert ... Warum? –

+0

Hallo Juan. Vielleicht wird die button.frame.origin.y maskiert. Versuchen Sie, die y-Koordinate zu ändern (vielleicht +2 Pixel) und versuchen Sie es. Vielleicht ist das das Problem – Joze

+1

Fantastische Antwort! Dies lässt die Navigationsleiste wirklich gut aussehen. Ein kurzes Problem, dass ich für andere gelesen habe: Wenn du einen Mach-o-Linker-Fehler bekommst, musst du die Quarzcore-Bibliothek in deinen Projekteinstellungen verlinken. Nochmals vielen Dank @Joze! – jonstaff