1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > iOS 修改导航栏背景色

iOS 修改导航栏背景色

时间:2024-01-23 00:44:58

相关推荐

iOS 修改导航栏背景色

在 iOS 7 后,导航栏增加了 translucent 效果,这使得导航栏背景色的变化出现了两种情况:

1.translucent 属性值为 YES 的前提下,更改导航栏的背景色。

2.translucent 属性值为 NO 的前提下,更改导航栏的背景色。

对于第一种情况,我们需要调用 UINavigationBar 的setBackgroundColor:方法。

这种方法显示的是渐变模糊效果的图片,没找到原因,推荐使用第二种

对于第二种情况我们需要调用 UINavigationBar 的setBackgroundImage:forBarMetrics:方法。

[self.navigationController.navigationBar setBackgroundImage:[self imageWithColor:UIColor.blueColor] forBarMetrics:UIBarMetricsCompactPrompt];

根据颜色生成图片

// 根据颜色生成UIImage- (UIImage*)imageWithColor:(UIColor*)color{CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);// 开始画图的上下文UIGraphicsBeginImageContext(rect.size);// 设置背景颜色[color set];// 设置填充区域UIRectFill(CGRectMake(0, 0, rect.size.width, rect.size.height));// 返回UIImageUIImage* image = UIGraphicsGetImageFromCurrentImageContext();// 结束上下文UIGraphicsEndImageContext();return image;}

对于第二种情况,这里有三点需要提示:

1.在设置透明效果时,我们通常可以直接设置一个[UIImage new]创建的对象,无须创建一个颜色为透明色的图片。

2.在使用setBackgroundImage:forBarMetrics:方法的过程中,如果图像里存在 alpha 值小于 1.0 的像素点,则 translucent 的值为 YES,反之为 NO。也就是说,如果我们真的想让导航栏变成纯色且没有 translucent 效果,请保证所有像素点的 alpha 值等于 1。

3.如果设置了一个完全不透明的图片且强行将 NavigationBar 的 translucent 属性设置为 YES 的话,系统会自动修正这个图片并为它添加一个透明度,用于模拟 translucent 效果。

4.如果我们使用了一个带有透明效果的图片且导航栏的 translucent 效果为 NO 的话,那么系统会在这个带有透明效果的图片背后,添加一个不透明的纯色图片用于整体效果的合成。这个纯色图片的颜色取决于 barStyle 属性,当属性为 UIBarStyleBlack 时为黑色,当属性为 UIBarStyleDefault 时为白色,如果我们设置了 barTintColor,则以设置的颜色为基准。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。