iOS11 真的是太坑了,界面偏移什么的都是小事,最头疼的是 iPhone X,状态栏 44 什么鬼,tabbar 83 ??. 吐槽到此为止,谁让咱们是吃这碗饭的呢,下面开始干货.
1.问题描述:
iOS11 以前很多界面设置了 navBar 的透明度,随着 scrollview 的滑动动态改变透明度,但是更新 iOS 11后发现在 viewWillAppear 中设置透明度后会被重新渲染(时间关系还没来得及深究),导致界面刚进来时 navBar 是完全不透明的,但是手动滑动后效果没变.
2.目标样式:
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];
到此就完成了,欢迎小伙伴把有问题的地方指出来,或者其他问题相互讨论.