iOS开发技巧

来源:互联网 发布:淘宝拆分订单付款 编辑:程序博客网 时间:2024/06/17 05:28

在以前,我们可以通过当前控制器的导航控制器再获取到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];// 将导航条背景改为透明

效果如下:

原创粉丝点击