当单元格即将离开屏幕时,UICollectionView Cell 的阴影突然消失

Posted

技术标签:

【中文标题】当单元格即将离开屏幕时,UICollectionView Cell 的阴影突然消失【英文标题】:Shadow of UICollectionView Cell suddenly disappears when the cell is about to go offscreen 【发布时间】:2018-01-16 15:32:00 【问题描述】:

我有一个带有圆形和阴影下降单元格的集合视图。当单元格即将被导航栏覆盖时,单元格的阴影突然消失,而不是平滑地移出视图。下面是代码:

    contentView.layer.cornerRadius = 20
    contentView.layer.masksToBounds = true

    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOpacity = 0.1
    layer.shadowOffset = CGSize(width: 0, height: 5.0)
    layer.shadowRadius = 5.0
    layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: contentView.layer.cornerRadius - 3).cgPath
    layer.shouldRasterize = true
    layer.rasterizationScale = UIScreen.main.scale

这是显示问题的 gif。专注于单元格底部的阴影。导航栏是白色的。任何帮助,将不胜感激。谢谢!

【问题讨论】:

你对collectionview的contentinset属性做了什么吗? 我认为@Milan Nosáľ 认为这是因为细胞消失了。一个快速的解决方案(可能有效,我不知道)是允许 UICollectionView(通过NSLayoutConstraints)位于导航栏下方,并首先让它有一个小的“不可见单元格”。 @user3808183 你能解决这个问题吗? 嗨米兰,感谢您的回复,我很确定它应该可以工作,因为将导航栏设置为半透明可以解决问题。但是@Larme 解决方案对我来说似乎更干净一些。 Larme,您介意详细介绍一下如何在导航栏下方扩展收藏视图吗?我的集合视图控制器是嵌入在导航控制器中的父控制器的子级。 这是布局的问题,您只需将collectionView顶部放在导航栏下方,但这取决于您如何进行布局-没有代码很难提出任何建议.. 【参考方案1】:

不要设置contentView 的阴影,而是将所有内容嵌入UIView 并设置该视图的阴影。然后你必须增加你的单元格的高度大约20 points 或你的阴影高度。我猜应该可以。

【讨论】:

你为什么要重复我的回答? 哦,我没看到,或者我们可能同时回答了。你的想法有版权吗?顺便说一句,我以不同的方式回答了?【参考方案2】:

我相信这仅仅是因为单元格确实从视图中移除了,因此它的阴影随之而来。此时,单元格的框架不在视野范围内,而阴影仍然可见(阴影在框架周围) - 但是当框架离开视野时,collectionView 会删除单元格。于是影子突然消失了。

我会做的很简单。我会重构代码以将当前单元格内容包装到一个新的UIView 中——我们称之为wrapper,这将消除阴影。然后将这个wrapper 放入单元格的contentView 中,这样wrapper 及其阴影就可以放入contentView 中。那么阴影将成为contentView框架的一部分,这意味着只有当整个单元格被隐藏时,阴影才会从屏幕上消失。

当然,您将不得不修改collectionView 的单元格大小,因为现在单元格将更大以包含阴影。

【讨论】:

以上是关于当单元格即将离开屏幕时,UICollectionView Cell 的阴影突然消失的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 滚动离开屏幕时清除单元格值

当collectionview中的第一个单元格聚焦时无法聚焦uibutton

当单元格滚动回视图时表格崩溃

表视图单元格仅在屏幕外时自动布局

如何保存单元格的状态,以便当我滚动或离开页面时它不会刷新单元格?

检查是不是选择了 UITableViewCell,并且单元格离开了屏幕