【问题标题】:Update constraint inside layoutSubviews() of UITableViewCell更新 UITableViewCell 的 layoutSubviews() 内的约束
【发布时间】:2020-09-30 19:27:16
【问题描述】:

我需要更新UITableViewCell 中的约束值,这应该会触发单元格的大小调整。在更新约束值之前,我需要知道正确的帧,但是将我的代码放在layoutSubviews() 中不会调整单元格的大小。附加约束的子视图会增长,但单元格保持相同的初始高度,从而切断视图。

出于演示目的,我的设置非常简单,我在单元格的contentView 的边缘固定了一个UIView,并添加了一个高度限制。我希望当视图的高度约束改变时单元格会调整大小。

override func layoutSubviews() {
    super.layoutSubviews()

    heightConstraint.constant = 500
}

关于为什么这不起作用的任何想法?

【问题讨论】:

    标签: ios swift uitableview autolayout


    【解决方案1】:

    layoutSubviews() 中的单元格高度有几个变化。

    通常,当单元格修改其内部布局(约束等)时,单元格必须告诉表格视图重绘自身。

    在您的情况下,单元格的layoutSubviews() 在表格视图确定单元格的高度之后被调用

    解决这个问题的几种方法,如果你真的需要在layoutSubviews()

    1 - 在viewDidAppear() 中调用 relaodData()

    2 - 强制cellForRowAt内的单元格布局:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell
        // set your cell properties here as usual - labels, images, etc...
        cell.setNeedsLayout()
        cell.layoutIfNeeded()
        return cell
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2023-03-24
      • 1970-01-01
      • 2014-02-07
      • 2017-06-28
      • 2017-04-21
      • 2020-10-02
      相关资源
      最近更新 更多