12

मैं UINavigationBar के शीर्ष दाएं और ऊपरी बाईं ओर जाना चाहता हूं।UINavigationBar दो कोनों को बढ़ाया

मुझे पता है कि विचारों कोने की त्रिज्या को बदलने के लिए कार्य करता हैं कि, लेकिन यह मानक UINavigationBar के लिए इसी तरह कुछ करने के लिए संभव है?

आप नहीं जानते कि मैं क्या बात कर रहा हूँ, बाहर इस जाँच:

धन्यवाद!

+0

दृश्य कोने त्रिज्या को बदलना संभव है, लेकिन यह सभी कोनों को प्रभावित करेगा! –

उत्तर

10

सबसे अच्छा तरीका है UINavigationBar में drawRect ओवरराइड और एक कस्टम छवि का उपयोग करने के लिए है।

+0

-DrawRect: आईओएस 5 में नहीं बुलाया जाता है - http://stackoverflow.com/questions/5575821/custom-nav-bar-styling-ios/6389991#6389991 –

+0

इसे अपडेट करने के लिए धन्यवाद। मुझे आशा है कि आजकल सभी को यूआईपीपीरेंस प्रोटोकॉल के बारे में सूचित किया जाए। –

44

निम्नलिखित कोड मुझे (iOS5 पर परीक्षण) के लिए काम करता है। निम्नलिखित कोड मुख्य नेविगेशन बार के शीर्ष बाएं/दाएं कोनों को राउंड करता है। इसके अतिरिक्त, इसमें एक छाया जोड़ती है:

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

@ जोज़ यह एक आकर्षण की तरह काम करता है, लेकिन मेरा यूआईबटन वापस काम करना बंद कर देता है ... क्यों? –

+0

हाय जुआन। शायद बटन.frame.origin.y मुखौटा जा रहा है। वाई समन्वय (शायद +2 पिक्सेल) को बदलने की कोशिश करें और इसे आजमाएं। शायद यह समस्या – Joze

+1

शानदार जवाब है! यह वास्तव में नेविगेशन बार महान लग रहा है। एक त्वरित समस्या जिसे मैंने दूसरों के पढ़ने के लिए भाग लिया: यदि आपको एक मशीन-ओ लिंकर त्रुटि मिलती है, तो आपको अपनी प्रोजेक्ट सेटिंग्स में क्वार्ट्जकोर लाइब्रेरी को लिंक करना होगा। धन्यवाद फिर से @ जॉज! – jonstaff

संबंधित मुद्दे