iOS11:UINavigationBar 透明度设置

iOS11 真的是太坑了,界面偏移什么的都是小事,最头疼的是 iPhone X,状态栏 44 什么鬼,tabbar 83 ??. 吐槽到此为止,谁让咱们是吃这碗饭的呢,下面开始干货.

1.问题描述:
iOS11 以前很多界面设置了 navBar 的透明度,随着 scrollview 的滑动动态改变透明度,但是更新 iOS 11后发现在 viewWillAppear 中设置透明度后会被重新渲染(时间关系还没来得及深究),导致界面刚进来时 navBar 是完全不透明的,但是手动滑动后效果没变.

2.目标样式:

Simulator Screen Shot - iPhone 8 - 2017-10-24 at 10.02.38.png

3.解决方法:
在 viewWillAppear 中通过 setBackgroundImage 方法实现:

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithRed:209/255.0 green:13/255.0 blue:29/255.0 alpha:(offset / 64)>0.99?0.99:(offset / 64)]] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage imageWithColor:[UIColor colorWithRed:209/255.0 green:13/255.0 blue:29/255.0 alpha:(offset / 64)>0.99?0.99:(offset / 64)]]];

这里注意一下, alpha 不能给 1 .如果给 1 系统会默认你的 VC 是位于 Nav 下方的,导致 VC 向下偏移 Nav 的高度.

在 viewWillDisappear 中置为 nil :

[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:nil];
//在 push 后因为 navBar 没有图片为白色,会造成下个界面 puch 出来时有白色闪光
[self.navigationController setNavigationBarHidden:YES animated:NO];

在 viewDidDisappear 中显示 Nav:

    [self.navigationController setNavigationBarHidden:NO animated:NO];

到此就完成了,欢迎小伙伴把有问题的地方指出来,或者其他问题相互讨论.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS11 真的是太坑了,界面偏移什么的都是小事,最头疼的是 iPhone X,状态栏 44 什么鬼,tabbar...
    贝灬小晖阅读 4,580评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,079评论 25 709
  • 第二章.17/10/26.静思 小A告诉我最近家里和朋友告诉都在给她介绍男朋友.我听了之后.说很好啊.(心里想着她...
    大眼松鼠喂爱营阅读 1,118评论 0 1
  • 郭相麟 节日里是人们出门访友,欣赏自然风光,品尝精神食粮,观赏美好环境的大好时节! 在欢度节日的背后有着默默...
    郭相麟阅读 2,682评论 0 0
  • 财富两极分化导致社会上存在阶层,不同阶层的人彼此看不对眼的话,会有一些人仇富。当然,一些富二代的行径被放大一...
    溪呢喃阅读 1,469评论 0 0