我挣扎了一段时间,我找不到任何有相关问题的人。 我的问题是,在iPad上为横向模式加载的背景图像不是正确的(它背景图像的肖像版本)。 在iPhone或iPod上它可以正常工作。
我在AppDelegate文件上使用的代码如下:
if ( [[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0 ) {
// Create resizable images
UIImage *gradientImageP = [[UIImage imageNamed:@"header"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *gradientImageL = [[UIImage imageNamed:@"header-Landscape"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:gradientImageP
forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:gradientImageL
forBarMetrics:UIBarMetricsLandscapePhone];
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:0 green: 0 blue:0 alpha:1]];
}
问题出在这一行?
[[UINavigationBar appearance] setBackgroundImage:gradientImageL
forBarMetrics:UIBarMetricsLandscapePhone];
我的图片名称如下:
编辑:导航栏上问题的屏幕截图:
有这个问题的人吗? 我对如何解决这个问题持开放态度,tkz
答案 0 :(得分:3)
只需使用此代码:
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"ipad-menubar.png" ] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)] forBarMetrics:UIBarMetricsDefault];
答案 1 :(得分:1)
追加~iPad是否适用于肖像模式?
这不适合我。你是否还必须指定~iPhone才能让它工作?
我通过
获得了为iPad工作的单独图像- (void)customizeAppearance {
if ([[UINavigationBar class]respondsToSelector:@selector(appearance)]) {
// Create resizable images for iphone
UIImage *navbarImage44 = [[UIImage imageNamed:@"navbar_bg_portrait"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *navbarImage32 = [[UIImage imageNamed:@"navbar_bg_landscape"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Overide for iPad
// In theory navbar_bg_landscape~iPad should work
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
//use iPad specific image extending last pixel for landscape mode
navbarImage44 = [[UIImage imageNamed:@"navbar_bg_portrait~iPad"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 767, 0, 0)];
}
// Set the background image for *all* UINavigationBars
[[UINavigationBar appearance] setBackgroundImage:navbarImage44
forBarMetrics:UIBarMetricsDefault];
// Never called on iPad, used for landscape on iPhone
[[UINavigationBar appearance] setBackgroundImage:navbarImage32
forBarMetrics:UIBarMetricsLandscapePhone];
}
}
但对于横向模式,它使用纵向图像并重复最后一个像素列来完成缺失部分,因此对您的问题没有好处,尽管这可能对其他读者有用。
答案 2 :(得分:1)
我无法通过旋转来管理适用于iPad的外观方法。即使导航栏的框架正确调整大小,图形也不会改变。最后,我将所有控制器的viewWillAppear:animated
和willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
方法联系起来,只需在iPad上使用正确的版本调用setBackgroundImage:
即可。丑陋,但有效。
这可能是值得向Apple报告的错误。定义本身的名称也令人困惑,UIBarMetricsLandscapePhone
在iPad上没有意义,您的默认应用方向可能是风景!
答案 3 :(得分:0)
我认为你需要做这样的事情:
UIImage *gradientImageP;
UIImage *gradientImageL;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
//use iPhone specific images
gradientImageP = [[UIImage imageNamed:@"header~iphone.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
gradientImageL = [[UIImage imageNamed:@"header-Landscape~iphone.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
//use iPad specific images
gradientImageP = [[UIImage imageNamed:@"header~Landscape~ipad.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
}