2008-12-19 38 views
7

Tôi đang thêm nền tùy chỉnh cho UINavigationBar của mình. Nó hoạt động tốt miễn là điện thoại ở chế độ dọc. Ngay sau khi tôi chuyển sang chế độ ngang, một nửa thanh có màu xanh dương (màu thanh điều hướng mặc định) và một nửa có màu là hình ảnh của tôiNền tùy chỉnh cho UINavigationBar ở chế độ ngang

Làm cách nào để kéo hình ảnh sang chế độ ngang và làm lại nhỏ cho chế độ dọc?

Cảm ơn

Giải pháp
Trong trường hợp bất cứ ai đang tìm kiếm một câu trả lời thế nào để thêm một hình ảnh để thanh điều hướng - đây đi

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 480.0, 44.0)]; 
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"navbar_landscape" ofType:@"png"]]]; 
[navigationController.navigationBar addSubview:imgView]; 
[imgView release]; 
+0

Tôi phải thay đổi dòng thứ hai đó thành: [imgView setImage: [UIImage imageNamed: @ "navbar.png"]]; ... trong trường hợp ai đó đấu tranh với noshow. – maralbjo

+0

Cảm ơn, uhm bài viết là một chút cũ, anyway .. những gì về việc thay đổi chiều cao của navigationBar? Tôi có nên phân lớp nó trong trường hợp đó không? – aneuryzm

Trả lời

3

Bạn có thể cần phải thiết lập các autoresizingMask của chế độ xem hình nền của bạn; hãy thử sử dụng UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

1

Giải pháp mà Ben đưa ra đã giải quyết được sự cố nhưng nó kéo dài hình ảnh ở chế độ ngang. Tôi đã kết thúc việc tạo ra hai hình ảnh-một cho cảnh quan và khác cho chế độ chân dung. sau đó tôi đã thêm mã trong shouldAutoRotate để thay đổi hình ảnh navbar dựa trên định hướng

6

Trong cả hai chế độ hướng màn hình nó tốt hơn nhiều để sử dụng

[navigationController.navigationBar insertSubview:imgView atIndex:0]; 

này đặt xem hình ảnh dưới tất cả các quan điểm khác và tất cả các thanh điều hướng mặc định các phần tử (tiêu đề, các nút tiêu chuẩn) hoạt động OK.

6

Sau một chút nghiên cứu và đường mòn và lỗi, tôi đã tìm thấy một công việc xung quanh, điều đó sẽ không thay thế thanh điều hướng khi bạn vào chế độ phát lại phim. Hopeefully điều này không gây ra vấn đề với sự chấp thuận ứng dụng, nhưng dựa trên bài này, tôi nghĩ rằng nó nên được tốt:

http://developer.apple.com/iphone/library/qa/qa2009/qa1637.html

@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 
0

Hãy thử phương pháp đơn giản hơn [UIImage imageNamed:@"navbar_landscape.png"] từ một yếu tố giao diện người dùng là chính xác những gì imageNamed : là dành cho, như ljonesATL cho thấy.

1

Bạn có thể thay đổi hình ảnh cho cả dọc và ngang định hướng bằng cách cung cấp những hình ảnh khác nhau cho định hướng khác nhau bằng cách kiểm tra kích thước khung hình đó dụ thanh UINavigation:

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context 
{ 
    if ([self isMemberOfClass:[UINavigationBar class]] == NO) { 
     return; 
    } 

    UIImage *image = (self.frame.size.width > 320) ? 
         [UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait]; 
    CGContextClip(context); 
    CGContextTranslateCTM(context, 0, image.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 
    CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage); 
} 

this complete demo Xcode project về tùy chỉnh xuất hiện của UINavigationBar có thể Hữu ích. Nó cũng bao gồm @ 2x phiên bản của hình ảnh nền để hỗ trợ màn hình võng mạc trên các thiết bị iPhone 4.

+1

Đây là _by far_ giải pháp tốt nhất, toàn diện nhất mà tôi đã nhìn thấy và dự án ví dụ của bạn trong github là tuyệt vời. ** Cảm ơn bạn. ** Tôi sẽ khuyến khích mọi người bỏ phiếu này. – memmons

+0

Cảm ơn rất nhiều. Tôi rất vui vì bạn thấy nó hữu ích. –

Các vấn đề liên quan