如何在 UITableViewCell 单元格中隐藏具有大小的按钮?

How I can hide button with size in UITableViewCell cell?

我有 UITableView 和 UITableViewCell。 我从 API 获取数据。有些项目有 link,有些则没有。 如果该项目没有 link 我想隐藏带有书本图标的按钮。 当我使用这个方法时(看下面)按钮被隐藏了,但是当 tableview 重用这个带有书的单元格图标时不会回来。我该如何解决?

var addButtonTrailingConstraint =  openPdfButton.widthAnchor.constraint(equalToConstant: 0)
    if link == nil{
        NSLayoutConstraint.activate([addButtonTrailingConstraint])


    }else{
         NSLayoutConstraint.deactivate([addButtonTrailingConstraint])
    }

}

你需要

if link == nil {
     openPdfButton.widthAnchor.constraint(equalToConstant: 0).isActive = true 
} else { 
     openPdfButton.constraints.forEach {
       openPdfButton.removeConstraint([=10=])
     }
}

如果没有更多代码/约束设置知识,这有点难以回答。

但我可以给你 2 个提示,如何通过另一种方法解决这个问题:

1.方法:使用UIStackView来管理你的按钮:

删除您的按钮并用 UIStackView 替换它们。然后在代码中,在配置单元格(设置文本、标题等)的地方,您首先从 UIStackView 中删除所有按钮(您可以使用 stackView.removeAllArrangedSubviews() 轻松完成此操作,这是必需的,因为单元格正在被重用,您不想在每次显示单元格时添加越来越多的按钮。 之后,在此单元格中添加您需要的按钮(例如:像这样:stackView.addArrangedSubview(button))。

这种方法的好处是它非常动态,您可以根据需要添加任意数量的不同按钮,而无需修改代码。 但由于您需要一直创建新按钮,因此它不是最高效的解决方案。

2。方法:使用 2 个不同的 UITableViewCell 类:

制作 2 个不同的 UITableViewCells,一个有一个按钮,另一个有 2 个按钮。您还可以从另一个继承一个以减少重复代码。 然后在 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中检查您需要的 2 个单元格 类 中的哪一个,创建正确的单元格并设置其成员(文本、标题...)。

与 1. 方法相比,这种方法不太灵活,但性能效率更高。 我在生产中使用了这两种方法,它们工作得很好:)