簡體   English   中英

取消隱藏某些UIStackView的子視圖時,UITableViewCell不會更改高度

[英]UITableViewCell doesn't change height when some UIStackView's subviews are unhidded

如標題所示,我有一個自定義UITableCell,其中有一些UIStackViews。 這些堆棧中的每個堆棧都包含許多子視圖,但是我只想在首次顯示該單元格時顯示其中的三個。 如果用戶希望看到更多內容,可以使用[+]按鈕來調用添加剩余部分的方法。

自定義單元格的高度是通過UITableViewAutomaticDimension確定的,它非常適合單元格的第一次顯示,但是當我嘗試向堆棧中添加和刪除子視圖時,有些不應修改的視圖會失去約束,而那些視圖應該被約束在某些情況下不會顯示出來。 我想要顯示所有UILabel和要更新的單元格的高度。

按下按鈕[+]時調用的方法如下:

@objc private func changeImage(sender: UIButton) {

    let index = (Int(sender.accessibilityValue!)!)
    let open : Bool = openItem[index]
    let plateStack : UIStackView = plateStacks[index]
    let plates : [UILabel] = platesViews[index]

    if !open {
       sender.setImage(UIImage(named: "less")?.withRenderingMode(.alwaysTemplate), for: .normal)
       let nPlatesToAdd = max(platesViews[index].count - 3, 0)
       for i in 0..<nPlatesToAdd {
            let plate = plates[i + 3]
            plateStack.addArrangedSubview(plate)
            plate.leadingAnchor.constraint(equalTo: plateStack.leadingAnchor, constant: 0).isActive = true
            plate.trailingAnchor.constraint(equalTo: plateStack.trailingAnchor, constant: 0).isActive = true
        }
    }
    else {
        sender.setImage(UIImage(named: "more")?.withRenderingMode(.alwaysTemplate), for: .normal)
        var i = plateStack.arrangedSubviews.count - 1
        while i > 2 {
            let view = plateStack.arrangedSubviews[i]
            plateStack.removeArrangedSubview(view)
            view.removeFromSuperview()
            i = i - 1
        }
    }
        openItem[index] = !open
}

單元格的第一個顯示(一切正常),然后單擊[+]按鈕:

在此處輸入圖片說明

發生這種情況是因為tableView已經呈現了其布局。 您可能需要檢查一些原因:

  • 確保將stackView約束正確放置到contentView
  • stackView的發行版必須fill
  • 更改會影響tableView高度的內容后,可以使用以下代碼更新單元格高度,而無需重新加載表格:

    tableView.beginUpdates()
    tableView.endUpdates()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM