【问题标题】:viewDidLayoutSubviews for Custom UITableViewCell自定义 UITableViewCell 的 viewDidLayoutSubviews
【发布时间】:2017-10-24 08:25:34
【问题描述】:

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

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

在常规视图中,我会使用viewDidLayoutSubviews(),因为这样视图被布局,我可以获得宽度并执行动画。但是,自定义 UITableViewCell 的等效函数是什么?

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

【问题讨论】:

  • 您可能必须创建 UITableViewCell 的子类,然后从那里开始。
  • 嗯,我确实有,如果不清楚,对不起
  • 我知道这可能比这更深,但是,您是否尝试将宽度分配给cellForRow:at: 中的表格单元格? cell.frame.size.width = tableView.frame.size.width
  • layoutSubviews 在单元格子类中可能会起作用。
  • 哈哈谢谢@lu2302,它真的很管用!没想到这么容易:)

标签: swift animation uikit tableview


【解决方案1】:

正确的地方在layoutSubviews里面:

class MyCell : UITableViewCell {
    override func layoutSubviews() {
        super.layoutSubviews()
        // do your thing
    }
}

【讨论】:

  • 嗨,我正在尝试使用这种方法,同时将渐变添加到自定义 UITableViewCell。我在layoutSubviews() 内调用applyGradient() 函数我的问题是,当表格加载时,我看不到渐变,但是在单击单元格后,渐变会显示。知道为什么在单击之前渐变不会显示吗?我尝试从代码中的不同位置调用layoutSubviews(),但没有成功。 @luk2302
  • @Chamanhm 我遇到了你的问题,上面的代码不需要调用函数,只需将渐变代码放在上面的 tableViewCell 类中的函数中:)
  • 我在为子视图设置阴影时遇到了类似的问题。显然,layoutSubviews 方法在视图被自动布局布局后不会被调用。 (或者由于某种原因它返回 0)
  • layoutSubviews() 在我的情况下不起作用。重用单元格后,渐变框架是错误的,即使我删除了渐变并在重用中再次应用它。在draw(_ rect: CGRect) 中更新框架解决了我的问题
【解决方案2】:

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

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

    //Your code here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2013-03-30
    • 2011-11-04
    相关资源
    最近更新 更多