添加 UIView 以覆盖整个 UITableViewCell 以及 iOS 10 中的附属视图
Add UIView to cover the whole UITableViewCell along with accessory view in iOS 10
我有一个相当简单的带有标准附件视图的自定义单元格。
在某些时候,我需要执行一个动画,用彩色视图覆盖整个单元格,彩色视图的中心有一个图像。当我这样做时,我在 iPhone 5 和 iOS 10.2 上遇到了奇怪的问题。
我就是这样做的:
使用 nib 文件创建 UITableViewCell 的子类。
将 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(带有附属视图)的视图添加到一个单元格并使其具有动画效果?
好的。看来我已经想通了。
显然 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
})
}
我有一个相当简单的带有标准附件视图的自定义单元格。
在某些时候,我需要执行一个动画,用彩色视图覆盖整个单元格,彩色视图的中心有一个图像。当我这样做时,我在 iPhone 5 和 iOS 10.2 上遇到了奇怪的问题。
我就是这样做的:
使用 nib 文件创建 UITableViewCell 的子类。
将 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(带有附属视图)的视图添加到一个单元格并使其具有动画效果?
好的。看来我已经想通了。
显然 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
})
}