我正在为我的UINavigationBar添加自定义背景。只要手机处于纵向模式,它就能正常工作。一旦我切换到横向模式,一半的条形显示为蓝色(默认的导航栏颜色),其中一半有我的图像
如何在横向模式下拉伸图像并在纵向模式下再次缩小图像?
由于
解决方案
任何人都在寻找如何将图像添加到导航栏的答案 - 这里是
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 :(得分:6)
在两种屏幕方向模式下,使用
要好得多[navigationController.navigationBar insertSubview:imgView atIndex:0];
这会将图像视图置于所有其他视图下,并且所有默认导航栏元素(标题,标准按钮)都可以正常工作。
答案 1 :(得分:6)
经过一些研究和追踪和错误后,我找到了一个解决方案,当你进入电影播放模式时,它不会取代导航栏。希望这不会导致应用程序批准出现问题,但基于这篇文章,我认为应该没问题:
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
答案 2 :(得分:3)
您可能需要设置背景图片视图的autoresizingMask;尝试使用UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
答案 3 :(得分:1)
Ben给出的解决方案确实解决了问题,但它以横向模式拉伸图像。我最终创建了两个图像 - 一个用于横向,另一个用于纵向模式。然后我在shouldAutoRotate中添加了代码,以根据方向更改导航栏图像
答案 4 :(得分:1)
您可以通过检查该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);
}
关于自定义UINavigationBar外观的this complete demo Xcode project可能会有所帮助。它还包括@ 2x版本的背景图像,以支持iPhone 4设备上的视网膜显示。
答案 5 :(得分:0)
尝试更简单的[UIImage imageNamed:@"navbar_landscape.png"]
方法,因为UI元素正是 imageNamed:的目的,正如ljonesATL所示。