如何在 UITableViewCell 单元格中隐藏具有大小的按钮?
Posted
技术标签:
【中文标题】如何在 UITableViewCell 单元格中隐藏具有大小的按钮?【英文标题】:How I can hide button with size in UITableViewCell cell? 【发布时间】:2019-12-24 19:51:50 【问题描述】:我有 UITableView 和 UITableViewCell。 我从 API 获取数据。有些项目有链接,有些则没有。 如果该项目没有链接,我想隐藏带有书本图标的按钮。 当我使用这种方法时(如下所示)按钮被隐藏了,但是当 tableview 重用这个单元格图标和书时不会回来。我该如何解决?
var addButtonTrailingConstraint = openPdfButton.widthAnchor.constraint(equalToConstant: 0)
if link == nil
NSLayoutConstraint.activate([addButtonTrailingConstraint])
else
NSLayoutConstraint.deactivate([addButtonTrailingConstraint])
【问题讨论】:
【参考方案1】:如果没有更多关于约束设置的代码/知识,这有点难以回答。
但我可以为您提供 2 个提示,如何通过另一种方法解决此问题:
1.方法:使用UIStackView
来管理你的按钮:
删除您的按钮并将它们替换为UIStackView
。然后在代码中,在您配置单元格的位置(设置文本、标题...),您首先从UIStackView
中删除所有按钮(您可以使用stackView.removeAllArrangedSubviews()
轻松完成此操作,这是必需的,因为单元格正在被重用并且您不想在每次显示单元格时添加越来越多的按钮。
之后,在此单元格中添加您需要的按钮(例如:像这样:stackView.addArrangedSubview(button)
)。
这种方法的好处是它非常动态,您可以根据需要添加任意数量的不同按钮,而无需修改代码。 但由于您需要一直创建新按钮,因此它并不是最高效的解决方案。
2。方法:使用2个不同的UITableViewCell
类:
制作 2 个不同的 UITableViewCells
,一个带有一个按钮,另一个带有 2 个按钮。您还可以从另一个继承一个以减少重复代码。
然后在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
中检查您需要的 2 个单元类中的哪一个,创建正确的并设置其成员(文本、标题、...)。
与 1. 方法相比,这种方法不太灵活,但性能效率更高。 我在生产中使用了这两种方法,它们工作得很好:)
【讨论】:
【参考方案2】:你需要
if link == nil
openPdfButton.widthAnchor.constraint(equalToConstant: 0).isActive = true
else
openPdfButton.constraints.forEach
openPdfButton.removeConstraint($0)
【讨论】:
对我不起作用。当刚刚创建的表格视图一切正常。但是当我向下滚动然后向上滚动时 - 带有按钮的图标正在消失( 在我的单元格视图中,我在其中配置单元格(设置文本、标题和其他)并在 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中调用它 你在cellForRowAt
里面叫它吗?顺便说一句,尝试编辑以上是关于如何在 UITableViewCell 单元格中隐藏具有大小的按钮?的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell:获取单元格中 UILabel 的确切宽度
contentView 在 iOS 6 UITableViewCell 原型单元格中没有缩进