原理:
滑动表格时,根据变化的偏移量计算出等比例的透明度,再根据透明度设置导航栏的透明效果
步骤
1.设置导航栏透明
指定一张空图片,设置导航条透明,此时导航栏底部会出现一条线,这条线其实是导航栏的阴影图片
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
添加下面这行代码,给阴影图片指定一张空图片,就会隐藏这条线
self.navigationController?.navigationBar.shadowImage = UIImage()
2.分析表格与图片视图的位置关系
观察效果图,可以发现随着表格向上滑动,图片视图的高度会相应的发生变化,直至表格移动至导航栏的maxY(64)位置为止
如果把图片视图放到表格的headerView中,操作headerView中的图片视图会出现卡顿的问题(暂未解决),换一个方案,把图片视图和表格视图都添加到控制器view中,并且给表格添加内边距,(内边距top值与图片视图高度相等),这样比较容易计算出从当前位置到导航栏maxY之间的偏移量,再根据偏移量计算透明度值
ps:
ios11废弃了 self.automaticallyAdjustsScrollViewInsets = false,但使用下面的代码可以解决自动添加内边距的问题
if #available(iOS 11.0, *) {
self.tableView.contentInsetAdjustmentBehavior = .never
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
3.修改导航栏透明度、修改图片视图高度
观察效果图,当表格向上滑动至导航栏maxY(值为64)时,导航栏渐变完成,另外图片视图高度固定不变。
总结出,当表格滑动时,距离导航栏maxY的偏移量值小于64时,图片视图高度默认设置为64,导航栏渐变完成
demo中有sb和代码两种方式,区别在于sb可以直接拖拽视图控件的高度约束到控制器中,代码需要自己写高度约束
网友评论