Custom UITableViewCell的viewDidLayoutSubviews

Pas*_*cal 5 animation uikit tableview swift

我想为自定义TableViewCell的子视图设置动画.要执行此动画,单元格需要此子视图的宽度,该子视图由自动布局约束布局.

但是,当我在cellForRowAtIndex函数(mycell.animate())中使用动画函数时,宽度是0,因为子视图尚未布局,动画将不起作用.

在常规视图中,我会使用viewDidLayoutSubviews(),因为然后布局了视图,我可以获得宽度并执行动画.但是,自定义UITableViewCell的等效功能是什么?

我尝试了willDisplayTableView 的委托功能,但是当我打印出单元格子视图的宽度时,它仍然说0......

luk*_*302 15

里面是正确的地方layoutSubviews:

class MyCell : UITableViewCell {
    override func layoutSubviews() {
        super.layoutSubviews()
        // do your thing
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我正在尝试使用这种方法,同时向自定义 UITableViewCell 添加渐变。我在 `layoutSubviews()` 中调用了我的 `applyGradient()` 函数我的问题是当表格加载时,我看不到渐变,但是在我点击单元格后,渐变会显示出来。知道为什么在单击之前不会显示渐变吗?我尝试从代码中的不同位置调用 `layoutSubviews()`,但没有成功。@luk2302 (3认同)
  • layoutSubviews() 在我的情况下不起作用。重复使用单元后,渐变框架是错误的,即使我删除了渐变并在重复使用时再次应用它。更新 `draw(_ rect: CGRect)` 内的框架解决了我的问题 (2认同)

Bab*_*bar 13

如果您在 tableViewCell 中的 draw 函数中为您的视图设置动画,它将起作用

override func draw(_ rect: CGRect) {
    super.draw(rect)

    //Your code here
}
Run Code Online (Sandbox Code Playgroud)