导航栏背景透明终极方案

原理:导航栏透明通常需要把背景颜色和分割线设置透明,大部分的方案是直接设置一个空对象,简单粗暴,缺点是无法复原,现在的解决方案是拿到导航栏背景和分割线的对象,在适当的时候进行隐藏,以下是代码

 UIView *backgroundView = [[self.navigationController.navigationBar subviews] firstObject];
        for (UIView *subView in backgroundView.subviews) {
            if (subView.height > 63) {//实际高度为64 背景视图
                _navBackImageView = subView;
            }
      
            if (subView.height < 1.0) {//实际高度为0.5  分割线
                _navLineView = subView;
            }
        }
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    _navBackImageView.hidden = YES;
    _navLineView.hidden = YES;
}

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    _navBackImageView.hidden = NO;
    _navLineView.hidden = NO;

}

没有根据first object 和last object获取对象是因为子视图的对象顺序会改变,这样,拿到对象以后就可以根据自己的需求进行隐藏和显示,目前测试不受系统版本的影响。

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,653评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,480评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,041评论 3 119
  • 原来,我的视野是如此的狭小,我像被一片小小的树叶遮住了眼睛,只能停留在自己的表面认知之上,却无法探知事情的本质。
    七二变阅读 923评论 0 0
  • 1 “妈,过来吃饭吧。” “不了,你们先吃,我一会儿再吃。” “你辛辛苦苦做好饭了,理应和我们一起吃的,怎么能吃剩...
    e6b2e43f0eec阅读 4,464评论 0 8