美文网首页
导航栏渐变效果

导航栏渐变效果

作者: 也许________ | 来源:发表于2017-08-24 22:26 被阅读206次

原理:
滑动表格时,根据变化的偏移量计算出等比例的透明度,再根据透明度设置导航栏的透明效果

步骤
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可以直接拖拽视图控件的高度约束到控制器中,代码需要自己写高度约束

噼里啪啦小魔仙~~~~~~

相关文章

网友评论

      本文标题:导航栏渐变效果

      本文链接:https://www.haomeiwen.com/subject/jslydxtx.html