自从iOS11出来后,发现这种随着scrollerView移动而改变导航栏透明度和高度的app越来越多,废话不多说,直接上图看效果
渐变透明渐变高度
首先说说我的思路:
-
首先创建一个UINavigationBar的分类,将
backgroundImage
和shadowImage
设置为空的UIimage
-
接着用运行时动态的绑定一个View,并添加到
NavigationBar
视图的最底层
- 最后,在ScrollerView的Delegate方法
scrollViewDidScroll
中,对这个添加View
的alhpa
和transform
根据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,欢迎大家对我的轮子点✨✨
网友评论