添加 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 中的附件视图的主要内容,如果未能解决你的问题,请参考以下文章

UIView 背景大小问题

UIView 固定到屏幕边缘,但框架保持 0,0

以编程方式约束时uiview不绘图

如何添加子视图以覆盖 UINavigation barin UIViewController?

iPhone UIView - 调整框架以适应子视图

通过滑动 UIView 滑出导航以覆盖另一个 UIView