动画UITableViewCell高度

时间:2018-07-02 07:50:41

标签: ios swift uitableview

我在UITableViewCell内部有一个容器视图,该容器视图通过填充连接到contentview的4个边缘。我可以通过捏住高度和填充来调整containerView的大小。所有约束均正确更新,但contentView高度不变。这是containerView的约束。

contentView.addSubview(containerView)

containerView.translatesAutoresizingMaskIntoConstraints = false
containerViewLeadingAnchor =
containerView.leadingAnchor                 .constraint(equalTo: contentView.leadingAnchor,                         constant: 10)
containerViewTopAnchor =
containerView.topAnchor                     .constraint(equalTo: contentView.topAnchor,                             constant: 10)
containerViewBottomAnchor =
containerView.bottomAnchor                  .constraint(equalTo: contentView.bottomAnchor,                          constant: -10)
containerViewHeightAnchor =
containerView.heightAnchor                  .constraint(equalToConstant: 146)
containerViewWidthAnchor =
containerView.widthAnchor                   .constraint(equalToConstant: UIScreen.main.bounds.width - 20)

containerViewLeadingAnchor.isActive = true
containerViewTopAnchor.isActive = true
containerViewBottomAnchor.isActive = true
containerViewHeightAnchor.isActive = true
containerViewWidthAnchor.isActive = true

这是我如何在UITableViewCell中更新它们

containerViewLeadingAnchor.constant     = containerPaddingForComfortable - (containerPaddingForComfortable * scaleRatio)
containerViewTopAnchor.constant         = containerPaddingForComfortable - (containerPaddingForComfortable * scaleRatio)
containerViewWidthAnchor.constant       = (UIScreen.main.bounds.width - 20) + (containerPaddingForComfortable*2 * scaleRatio)
containerViewBottomAnchor.constant      = -containerPaddingForComfortable + (containerPaddingForComfortable * scaleRatio)

containerView.layer.cornerRadius = containerCornerRadius - (containerCornerRadius * scaleRatio)
self.layoutIfNeeded()

1 个答案:

答案 0 :(得分:1)

仅修改视图框架或约束以更新内容视图的大小是不够的。

在表视图中,单元格内容视图由单元格控制,而该单元格由表视图控制,或者是数据源或委托。在您的情况下,需要将像元高度设置为自动尺寸,以便在内部使用约束条件来确定像元大小。完成后,您将需要在表视图上调用names[j]beginUpdates()。像这样:

endUpdates()

尽管这看起来很奇怪,但是这两个调用将使大小无效并刷新表视图单元格的大小和位置。顺便说一下,更改单元格大小通常意味着还需要将其余单元格移动到调整后的单元格下面。