代码之家  ›  专栏  ›  技术社区  ›  Rakesha Shastri

设置uitableviewcell高度动画

  •  0
  • Rakesha Shastri  · 技术社区  · 8 年前

    我在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 回复  |  直到 8 年前
        1
  •  1
  •   Matic Oblak    8 年前

    仅仅修改图幅或约束来更新内容视图的大小是不够的。

    在表视图中,单元格内容视图由单元格控制,单元格由表视图控制,或者更确切地说是由数据源或委托控制。在这种情况下,需要将单元高度设置为自动标注,以便在内部使用约束来确定单元大小。完成后你需要打电话 beginUpdates() endUpdates() 在桌面视图上。比如说:

    func resizeMyCell(_ cell: MyCell, to height: CGFloat) {
        cell.heightConstraint.constant = height
        self.tableView.beginUpdates()
        self.tableView.endUpdates()
    }
    

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