隐藏 UIButton 而不仅仅是删除可见性

Posted

技术标签:

【中文标题】隐藏 UIButton 而不仅仅是删除可见性【英文标题】:Hide UIButton and not just remove visibility 【发布时间】:2017-03-23 22:43:28 【问题描述】:

我想在我的 swift 3 应用程序中隐藏我的 UIButton。

目前我设置了

cell.myButton.isHidden = true

这使得按钮不再可见,但按钮将占用的空间仍然被占用。

我怎样才能真正隐藏按钮?

我在 tableViewCell 中创建 UIButton 并使用 SnapKit 设置约束

【问题讨论】:

【参考方案1】:

试试

cell.myButton.removeFromSuperview()

【讨论】:

布局崩溃了。 如果您有与此按钮相关的其他项目约束,请确保它会崩溃。您可以通过向这些与超级视图相关的相关项目添加另一个约束来解决此问题。 但它也从表中应该保留的元素中删除。 如果您想再次显示此按钮,请保留您添加到其他项目的新约束并对按钮宽度进行约束并设置为 0 以隐藏和 cell.layoutIfNeeded() 并将其宽度值设置为再次显示 cell.layoutIfNeeded()【参考方案2】:

我认为您可以使用setNeedsLayout 调整tableViewCell 中子视图的位置。当您在 tableViewCell 类中设置 buttonHide 属性时,还要调用 self.setNeedsLayout() 然后您的viewDidLayoutSubview 将被触发,您应该在其中设置tableViewCell 的子视图的框架。

【讨论】:

我调用了 cell.setNeedsLayout - 但没有任何变化。 @develth 在您的 tableViewCell 类中,您需要覆盖 viewDidLayoutSubview 并将所有子视图放在正确的位置(基于您的 buttonHide 属性的值)【参考方案3】:

您有多种选择。

您可以为按钮的高度和宽度添加约束,将它们连接为插座,并将约束的常量设置为 0。这将使它们的大小为零。

您可以从它的超级视图中删除该按钮,如@AymanKarram 的回答所示,但您需要保持对它的强引用,否则它将被释放。 (尝试删除 @IBOutlet 声明 myButton 中的弱限定符作为测试。这将导致 IBOutlet 保持强引用。)

【讨论】:

我没有通过情节提要创建视图,所以我没有任何@IBOutlets 是否有可能通过 AymanKarram 的回答将项目保留在我需要该按钮的位置? 创建一个实例变量并将您的按钮保存在其中。 实例变量将保留对按钮的拥有引用,因此当您从其父视图中删除按钮时它不会被释放。【参考方案4】:

将 tableView 行的高度设置为 0 怎么样?

【讨论】:

我在 tableView 行中有其他元素需要显示。 @develth 如果您为按钮设置了等于 0 的高度约束?如果您使用 Storyboard 约束,我会告诉您为高度约束创建一个出口,并在您想要隐藏按钮时将常量设置为 0。但是当您使用 SnapKit 时,也许您可​​以再次设置 height = 0 的按钮约束。

以上是关于隐藏 UIButton 而不仅仅是删除可见性的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏单个 PivotItem 的可见性

包装和可见性

flexbox 中的可见性:隐藏和可见性:折叠有啥区别?

使一个 div 可见而另一个不可见

IE10:“可见性:可见”在“可见性:隐藏”元素的伪元素之前

可见性:隐藏在 Angular 2 中