自定义 UITableViewCell 的 viewDidLayoutSubviews
Posted
技术标签:
【中文标题】自定义 UITableViewCell 的 viewDidLayoutSubviews【英文标题】:viewDidLayoutSubviews for Custom UITableViewCell 【发布时间】: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,它真的很管用!没想到这么容易:)
【参考方案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
【讨论】:
以上是关于自定义 UITableViewCell 的 viewDidLayoutSubviews的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义 UITableViewCell 的 AVPlayer