如何在 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 上保留子视图

UITableViewCell:获取单元格中 UILabel 的确切宽度

UITableViewCell 选择停留在所有单元格中!

contentView 在 iOS 6 UITableViewCell 原型单元格中没有缩进

在每个 UITableViewCell 单元格中添加每次出现的键

滚动时 UITableViewCell 内容会发生变化,因为在其中一个单元格中运行计时器