2009-09-04 7 views
6

में यूआईनेविगेशन बार पृष्ठभूमि मैंने नेविगेशन बार छवि को बदलने के लिए अपने आवेदन के लिए निम्नलिखित कोड लागू किया है।आईफोन

- (void)viewWillAppear:(BOOL)animated { 
[super viewWillAppear:animated]; 
[self.navigationController.navigationBar setTintColor:[UIColor blackColor]]; 
[self setNavigationBarTitle]; 
} 
-(void)setNavigationBarTitle { 
UIView *aViewForTitle=[[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 45)] autorelease]; 
UIImageView *aImg=[[UIImageView alloc] initWithFrame:CGRectMake(-8, 0, 320, 45)]; 
aImg.image=[UIImage imageNamed:@"MyTabBG.png"]; 
[aViewForTitle addSubview:aImg]; [aImg release]; 
UILabel *lbl=[[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 305, 45)] autorelease]; 
lbl.backgroundColor=[UIColor clearColor]; lbl.font=[UIFont fontWithName:@"Trebuchet MS" size:22]; 
lbl.shadowColor=[UIColor blackColor]; [lbl setShadowOffset:CGSizeMake(1,1)]; 
lbl.textAlignment=UITextAlignmentCenter; lbl.textColor=[UIColor whiteColor]; [email protected]"Mobile Tennis Coach Overview"; 
[aViewForTitle addSubview:lbl]; 
[self.navigationItem.titleView addSubview:aViewForTitle]; 
} 

निम्नलिखित छवियां देखें। आप जिस समस्या का सामना कर रहे हैं उसे देख सकते हैं।

alt text


alt text

अपने आवेदन की प्रत्येक दृश्य नियंत्रक उपरोक्त विधियों नेविगेशन पट्टी पृष्ठभूमि सेट करने के लिए है।

कभी भी, जब मैं अपने आवेदन में एक नया दृश्य नियंत्रक दबाता हूं। बैक बटन दिखाई देगा।

मुझे दिखाई देने के लिए वापस बटन की आवश्यकता है। लेकिन छवि वापस बटन के पीछे होना चाहिए।

अब मैं थोड़ा उलझन में हूं।

क्या आप इस बारे में मेरी मदद कर सकते हैं?

मेरे साथ अपना ज्ञान साझा करने के लिए अग्रिम धन्यवाद।

बहुत बहुत धन्यवाद।

+0

हाय सागर, कैसे एक सामान्य बटन (यानी नहीं एक वापस बटन) प्रस्तुत करना है? क्या यह ठीक काम करता है या एक ही समस्या है? मेरे पिछले नेविगेशन नियंत्रक में – h4xxr

+0

- दृश्य गायब हो जाएगा - मैंने बैक - self.navigationItem.title = @ "back" के रूप में शीर्षक सेट किया है। –

उत्तर

6

एक कष्टप्रद रात के बाद, मैं एक मामूली ट्वीक यह करने के लिए, पाया अगर आप drawLayer का उपयोग करें। DrawRect के साथ, जब आप कोई वीडियो चलाते हैं, या यूट्यूब वीडियो, तो Navbar छवि के साथ बदल दिया जाता है। और मैंने कुछ पोस्ट पढ़ीं जिससे इससे उनके ऐप को खारिज कर दिया गया।

@implementation UINavigationBar (UINavigationBarCategory) 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    if([self isMemberOfClass:[UINavigationBar class]]) 
    { 
    UIImage *image = [UIImage imageNamed:@"navBarBackground.png"]; 
    CGContextClip(ctx); 
    CGContextTranslateCTM(ctx, 0, image.size.height); 
    CGContextScaleCTM(ctx, 1.0, -1.0); 
    CGContextDrawImage(ctx, 
    CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage); 
    } 
    else 
    {   
    [super drawLayer:layer inContext:ctx];  
    } 
} 
@end 

तो इस लेख सही है, सभी इस दृष्टिकोण के साथ ठीक किया जाना चाहिए: http://developer.apple.com/iphone/library/qa/qa2009/qa1637.html

5

संक्षिप्त उत्तर यह है कि UINavigationBar की संरचना को संशोधित करना ऐप्पल द्वारा समर्थित नहीं है। वे वास्तव में नहीं चाहते हैं कि आप जो भी करने की कोशिश कर रहे हैं वह कर रहे हों। यही वह समस्या है जो आप देख रहे हैं।

कृपया इस सुविधा का अनुरोध करने वाले रडार को दर्ज करें ताकि इसे किसी बिंदु पर आधिकारिक रूप से जोड़ा जा सके।

कहा जाता है कि, इस मुद्दे को हल करने के लिए आप UDavigationBar में एक श्रेणी जोड़ सकते हैं-ड्राउरेक्ट: विधि और उस विधि में पृष्ठभूमि छवि खींचें। कुछ इस तरह काम करेगा:

- (void)drawRect:(CGRect)rect 
{ 
    static UIImage *image; 
    if (!image) { 
    image = [UIImage imageNamed: @"HeaderBackground.png"]; 
    if (!image) image = [UIImage imageNamed:@"DefaultHeader.png"]; 
    } 
    if (!image) return; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage); 
}