自從iOS11出來后浊洞,發(fā)現(xiàn)這種隨著scrollerView移動而改變導航欄透明度和高度的app越來越多惜姐,廢話不多說犁跪,直接上圖看效果
首先說說我的思路:
首先創(chuàng)建一個UINavigationBar的分類,將
backgroundImage
和shadowImage
設(shè)置為空的UIimage
接著用運行時動態(tài)的綁定一個View,并添加到
NavigationBar
視圖的最底層
- 最后歹袁,在ScrollerView的Delegate方法
scrollViewDidScroll
中,對這個添加View
的alhpa
和transform
根據(jù)scrollView.contentOffset.y
進行相關(guān)處理即可
我在github上面也找到類似的框架LTNavigationBar,但是這里值得注意的是坷衍,iOS11之后的導航欄與之前的結(jié)構(gòu)上面發(fā)生了點小變化,所以在iOS11的機器上跑是會崩掉的条舔。原因是因為在iOS11中 UINavigationBar
沒有_leftViews
枫耳,_rightViews
,_titleView
這些key,所以用KVC會直接崩掉孟抗。所以我在這個輪子的基礎(chǔ)上做了些許修改迁杨,適配了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,歡迎大家對我的輪子點??