2009-09-04 28 views
6

Tôi đã áp dụng mã sau đây cho ứng dụng của mình để thay đổi hình ảnh thanh điều hướng.Nền thanh UINavigation trong iPhone

- (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]; 
} 

Xem hình ảnh sau đây. Bạn có thể thấy vấn đề mà tôi đang gặp phải.

alt text


alt text

Mỗi bộ điều khiển quan điểm của ứng dụng của tôi có trên phương pháp để thiết lập nền thanh điều hướng.

Bao giờ, khi tôi đẩy bộ điều khiển chế độ xem mới vào ứng dụng của mình. Nút quay lại sẽ xuất hiện.

Tôi cần nút quay lại để xuất hiện. Nhưng Hình ảnh phải ở phía sau nút quay lại.

Bây giờ tôi hơi bối rối ở đây.

Bạn có thể giúp tôi về vấn đề này không?

Cảm ơn trước đã chia sẻ kiến ​​thức của bạn với tôi.

Cảm ơn rất nhiều.

+0

Hi Sagar, làm thế nào một nút bình thường (tức là không phải là một nút quay lại) render? Liệu nó hoạt động tốt hay cũng có cùng một vấn đề? – h4xxr

+0

trong bộ điều khiển điều hướng trước của tôi - chế độ xem sẽ biến mất - tôi đã đặt tiêu đề là back - self.navigationItem.title = @ "back". –

Trả lời

6

Sau một đêm khó chịu, tôi đã tìm thấy một chút tinh chỉnh, nếu bạn sử dụng drawLayer. Với drawRect, khi bạn phát video hoặc video trên youtube, thanh điều hướng được thay thế bằng hình ảnh. Và tôi đã đọc một vài bài đăng khiến điều này khiến ứng dụng của họ bị từ chối.

@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 

Nếu bài viết này là chính xác, tất cả nên tốt với phương pháp này: http://developer.apple.com/iphone/library/qa/qa2009/qa1637.html

5

Câu trả lời ngắn gọn là việc sửa đổi cấu trúc của UINavigationBar không được Apple hỗ trợ. Họ thực sự không muốn bạn làm những gì bạn đang cố gắng làm. Đó là những gì đang gây ra vấn đề bạn đang thấy.

Vui lòng gửi một radar yêu cầu tính năng này để có thể nhận được đủ sự chú ý để được thêm chính thức tại một số thời điểm.

Có nói rằng, để giải quyết vấn đề, bạn có thể thêm danh mục vào UINavigationBar bằng phương thức -drawRect: và vẽ hình nền trong phương thức đó. Một cái gì đó như thế này sẽ hoạt động:

- (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); 
} 
Các vấn đề liên quan