添加 UIView 以覆盖整个 UITableViewCell 以及 iOS 10 中的附件视图
Posted
技术标签:
【中文标题】添加 UIView 以覆盖整个 UITableViewCell 以及 iOS 10 中的附件视图【英文标题】:Add UIView to cover the whole UITableViewCell along with accessory view in iOS 10 【发布时间】:2017-05-29 14:45:51 【问题描述】:我有一个相当简单的自定义单元格,带有标准附件视图。
在某些时候,我需要执行一个动画,用彩色视图覆盖整个单元格,其中心有一个图像。当我这样做时,我在装有 ios 10.2 的 iPhone 5 上遇到了奇怪的问题。
这就是我的工作:
使用 nib 文件创建 UITableViewCell 的子类。
在 init 方法中直接将 UIView coverView
作为子视图 (self.addSubview(self.coverView)
) 添加到我的自定义单元格(因为我也需要覆盖附件视图,所以我无法将其添加到 contentView
)。 coverView
以编程方式创建,没有布局约束。 UIImageView 通过布局约束以编程方式添加到其中,并将translatesAutoresizingMaskIntoConstraints
设置为false
。
添加方法:
func animateCState()
self.coverView.frame = self.bounds
self.coverView.frame.origin.y = -self.frame.size.height
self.bringSubview(toFront: self.coverView)
UIView.animate(withDuration: 0.3, animations:
self.coverView.frame.origin.y = 0
)
当用户点击单元格时调用animateCState
我的期望:绿色视图,中间有图片从顶部幻灯片
我得到了什么:显然透明的视图从顶部滑动,几乎在动画结束时闪烁为绿色。我可以看到 imageView 在正确的位置滑动。
问题:如何将覆盖整个 UITableViewCell(带有附件视图)的视图添加到单元格并能够对其进行动画处理?
【问题讨论】:
【参考方案1】:好的。看来我已经想通了。
显然 UITableView 或 UITableViewCell 对在prepareForReuse
之后或在其他某个时间点直接添加到单元格的所有视图执行某些操作(将.clear
颜色设置为背景)。在制作动画之前,我必须在 animateCState
函数中设置我想要的颜色。
所以我的方法是这样的:
func animateCState()
self.coverView.frame = self.bounds
self.coverView.frame.origin.y = -self.frame.size.height
self.bringSubview(toFront: self.coverView)
self.coverView.backgroundCOlor = .green
UIView.animate(withDuration: 0.3, animations:
self.coverView.frame.origin.y = 0
)
【讨论】:
以上是关于添加 UIView 以覆盖整个 UITableViewCell 以及 iOS 10 中的附件视图的主要内容,如果未能解决你的问题,请参考以下文章