iOS 导航栏随ScrollerView渐变透明、渐变高度

自从iOS11出来后,发现这种随着scrollerView移动而改变导航栏透明度和高度的app越来越多,废话不多说,直接上图看效果
渐变透明

渐变高度
首先说说我的思路:
  • 首先创建一个UINavigationBar的分类,将backgroundImageshadowImage设置为空的UIimage

  • 接着用运行时动态的绑定一个View,并添加到NavigationBar视图的最底层

  • 最后,在ScrollerView的Delegate方法scrollViewDidScroll中,对这个添加Viewalhpatransform根据scrollView.contentOffset.y进行相关处理即可

我在github上面也找到类似的框架LTNavigationBar,但是这里值得注意的是,iOS11之后的导航栏与之前的结构上面发生了点小变化,所以在iOS11的机器上跑是会崩掉的。原因是因为在iOS11中 UINavigationBar 没有_leftViews_rightViews_titleView这些key,所以用KVC会直接崩掉。所以我在这个轮子的基础上做了些许修改,适配了iOS11

if (@available(iOS 11.0,*)) {
        [[self subviews] enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([obj isKindOfClass:NSClassFromString(@"_UINavigationBarContentView")]) {
                
                for (UIView *view in [obj subviews])
                {
                    view.alpha = alpha;
                }
            }
        }];
    }

下面是完整的Demo,欢迎大家对我的轮子点✨✨

你可能感兴趣的:(iOS 导航栏随ScrollerView渐变透明、渐变高度)