TableView/CollectionView 滑动顶部效果优化

TableView/CollectionView 滑动顶部效果优化

默认弹簧效果

在使用 UITableView 或者 UICollectionView 时,如果开启弹框效果,下拉是整个内容就会偏移,松手就会自动弹回,最常用的就是我的界面。

如果scrolleView背景色和 cell/header 一样就不会产生什么突兀感,但是如果靠近顶部的视图是渐变/图片 或者和背景色差别较大,下拉就会产生突兀感。

如下图

在这里插入图片描述

那么怎解决了。

将 ScrollView 的偏移量传递到 Cell 中处理,进行子视图的偏移处理,造成视觉上的错觉。

注意: UITabelViewCell 或者 UICollectionViewCell 默认是开启裁剪的(clipsToBounds = true)

比如实现镂空滑动或者拉伸效果。

镂空滑动效果

效果如下图:

在这里插入图片描述

视图结构如下:

在这里插入图片描述

获取 ScrollView 的偏移量

通过代理方法 scrollViewDidScroll(_ scrollView: UIScrollView)可以轻松获取到偏移量。

	func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let offsetY = scrollView.contentOffset.y
        // 下拉 y 小于 0
        if  offsetY < 0  { //let coll = scrollView as? UICollectionView,
            let index = IndexPath(item: 0, section: Section.baseInfo.rawValue)
            let cell = coll.cellForItem(at: index) as! MineInfoCollectionCell
            cell.updateOffset(offsetY) // 将偏移量传入目标 cell, 进行改变
        }
    }

为白色视图顶部和 Cell 顶部添加约束 containerTopCons ,并且将 Cell的裁剪取消

在 Cell 代码中进行偏移量赋值

class MineInfoCollectionCell: UICollectionViewCell {
    static var cellHeight: CGFloat = 300
    @IBOutlet weak var containerTopCons: NSLayoutConstraint!
    override func awakeFromNib() {
        super.awakeFromNib()
        containerHeigthCons.constant = MineInfoCollectionCell.cellHeight
    }
    
    func updateOffset(_ offset: CGFloat) {
        containerTopCons.constant = offset  // 更新偏移量
    }
}

将 scrollView 的偏移量转移到 Cell 内部,就可以实现镂空式的效果。

滑动拉伸效果

效果如下图:

在这里插入图片描述

同样的道理,只需要为蓝色视图再增加一个底部约束,就可以实现拉伸效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值