在 iOS 7 中设置导航栏图像
Posted
技术标签:
【中文标题】在 iOS 7 中设置导航栏图像【英文标题】:Set navigation bar image in iOS 7 【发布时间】:2013-06-28 09:28:26 【问题描述】:我想将我当前的项目从 ios 6 转换为 iOS 7。 在 iOS 6 中,我的项目运行良好,但在 iOS 7 中导航栏图像显示不正确。
我在 iOS 6 上使用了这个代码 sn-p,
UIImage *imgNav = [UIImage imageNamed:@"navigation.png"];
self.navigationController.navigationBar.frame = CGRectMake(0, 0, 320, 44);
[self.navigationController.navigationBar setBackgroundImage:imgNav forBarMetrics:
UIBarMetricsDefault];
如何?
【问题讨论】:
感谢所有建议。我得到了问题的解决方案,但我不确定这是否正确。目前它对我有用。 谁能给出答案? ***.com/questions/16190127/… 【参考方案1】:尝试在 AppDelegate 中添加以下代码
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation.png"]
forBarMetrics:UIBarMetricsDefault];
这是 Swift 版本:
UINavigationBar.appearance().setBackgroundImage(UIImage.init(named: "navigation.png"), forBarMetrics: UIBarMetrics.Default)
Swift 3 版本:
UINavigationBar.appearance().setBackgroundImage(UIImage.init(named: "logo-dark.png"), for: UIBarMetrics.default)
【讨论】:
如果您遵循 ios7 指南中提到的规则来创建您将用作导航栏背景的图像,它就可以工作:developer.apple.com/library/ios/documentation/UserExperience/… 只需将其添加到 AppDelegate 中的 'applicationDidFinishLaunchingWithOptions' 方法中【参考方案2】:对于 iOS 7:
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];
【讨论】:
【参考方案3】:使用这个简单的语法来改变Navigation Background
Easy Way。
self.navigationController.navigationBar.barTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YourImage.png"]];
self.navigationController.navigationBar.titleTextAttributes = @NSForegroundColorAttributeName: [UIColor whiteColor];
【讨论】:
【参考方案4】:if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] )
UIImage *image = [UIImage imageNamed:@"navigation.png"];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
【讨论】:
【参考方案5】:故事板方式:
-
将图像视图拖到情节提要场景的底部栏上。
按住 Control 键从场景列表左侧的导航项拖动到新创建的图像视图。
点击图片视图,在属性中设置图片。
【讨论】:
【参考方案6】:[[UINavigationBar 外观] setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault];
如果您遵循 ios7 指南中提到的规则,它的工作原理: • 如果您想要没有渐变的纯色,请创建一个 1 x 1 点图像。 • 如果您想要垂直渐变,请创建一个宽度为 1 磅且高度与 UI 元素背景高度匹配的图像。 • 如果要提供重复的纹理外观,则需要创建尺寸与纹理重复部分的尺寸相匹配的图像。 • 如果要提供不重复的纹理外观,则需要创建尺寸与 UI 元素背景区域尺寸相匹配的静态图像。
更多信息请点击链接:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/ResizableImages.html#//apple_ref/doc/uid/TP40006556-CH30-SW1
【讨论】:
谢谢!这正是我所需要的。【参考方案7】:就这样吧..
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// This will set the backGround image for all the Navigation Bars
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar"] forBarMetrics:UIBarMetricsDefault];
return YES;
【讨论】:
【参考方案8】:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[[UINavigationBar appearance] setTitleTextAttributes: @
UITextAttributeTextColor: [UIColor whiteColor],
UITextAttributeTextShadowColor: [UIColor clearColor],
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)],
UITextAttributeFont: [UIFont fontWithName:@"AppleGothic" size:20.0f]
];
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigatio_for_ios6"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
else
[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x067AB5)];
// Uncomment to change the color of back button
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
// Uncomment to assign a custom backgroung image
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigon_bg_ios7.png"] forBarMetrics:UIBarMetricsDefault];
// Uncomment to change the back indicator image
[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]];
// Uncomment to change the font style of the title
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
shadow.shadowOffset = CGSizeMake(0, 1);
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,shadow, NSShadowAttributeName,[UIFont fontWithName:@"HelveticaNeue-Bold" size:18.0], NSFontAttributeName, nil]];
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
【讨论】:
【参考方案9】:在 appDelegate 类中试试这个代码,它会对你有所帮助。
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"navbarimg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];
【讨论】:
以上是关于在 iOS 7 中设置导航栏图像的主要内容,如果未能解决你的问题,请参考以下文章