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

导航栏渐变效果

作者: 也许________ | 来源:发表于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