您的位置:首页 > 移动开发 > IOS开发

iOS开发技巧 - 一行代码修改导航栏及状态栏的透明度

2017-07-23 16:17 393 查看
在以前,我们可以通过当前控制器的导航控制器再获取到navigatioBar导航条,修改导航条的barTintColor这个属性去修改它的透明度,如:

self.navigationController.navigationBar.barTintColor = [UIColor colorWithWhite:1.0 alpha:0.5];


但如果是沉浸式背景,那么状态栏statusBar的白色/黑色背景又会和导航栏出现颜色不同,因此我们还得同时修改statusBar的背景颜色,如:

UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
}


也可以给导航栏直接设置一个半透明的背景图片,通过color生成半透明图,这个网上很多分类,就不介绍了。

下面才是重点啊喂~!

在iOS10之后,navigationBar的barTintColor方法设置一个半透明颜色不起作用了!

取巧可以用另外一种设置方式:

[[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:0.5];

//找到navigationBar的背景view,然后设置alpha值,这样会连statusBar背景一并修改了


PS:如果不起作用 或者 别的控制器将导航栏上面的东西改了回去…

我们可能需要设置下面两个参数,在viewWillAppear方法中加上这两行代码,再结合上面的方法修改透明度。

self.navigationController.navigationBar.translucent = YES;

// 设置导航栏为有点透明的效果(系统给的),注意如果设置了这个参数,控制器中有scrollView的可能会向上偏移64px,也就是回到默认会被导航栏遮住的位置

self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
// 将导航条背景改为透明


效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息