隐藏 UIView 和更新约束

Posted

技术标签:

【中文标题】隐藏 UIView 和更新约束【英文标题】:Hiding a UIView & Updating Constraints 【发布时间】:2018-08-01 01:29:02 【问题描述】:

我有一个自定义表格视图单元格笔尖,它包含两个 textView、两个 imageView 和 4 个标签。约束是使用自动布局设置的,这就是笔尖的外观:

右侧的主图像视图从数据库中获取一个可选值。如果用户包含了图像,我希望它显示图像,但如果用户没有,我希望隐藏图像并且我希望调整 textView 的约束(左侧的自定义描述)和看起来像这样:

我确信这很容易做到,但我仍在学习,所以我要求的是指向正确的方向。根据存储的值切换约束的最佳方法是什么?

【问题讨论】:

【参考方案1】:

您可以设置约束,以便正文文本和图像视图之间有一个水平间距常数,而图像视图与其父视图的边缘之间有另一个水平间距。

从那里,您可以为图像视图创建宽度约束并将其IBOutletconstant 设置为0

【讨论】:

所以基本上,如果图像不存在,我会将图像视图的宽度设置为 0? 哇,真是天才。谢谢你的想法【参考方案2】:

我认为使用UIStackViews 最容易做到这一点。

对于左侧的许多标签,将它们放在垂直堆栈视图中或只是常规UIView。然后将它们的父视图与图像一起放在水平堆栈视图中。水平堆栈视图应按比例填充。

当您配置表格视图单元格时,请根据需要添加/删除图像视图。这是一些伪代码:

if data[indexPath.row].image != nil
    if imageView.parent == nil 
        horizontalStackView.addArrangedSubview(imageView)
    imageView.image = data.image
else if imageView.parent != nil
    imageView.removeFromSuperview()

【讨论】:

以上是关于隐藏 UIView 和更新约束的主要内容,如果未能解决你的问题,请参考以下文章

当视图开始被隐藏时,约束会发生啥?

“隐藏”具有自动布局子视图的 UIView

自动布局:如何隐藏包含子视图的 UIView?

如何隐藏 UIView 并删除“空白”空间? -iOS/单触

使用带有自动布局的推送时隐藏按钮时,约束更新导致项目移动

如何在tableview上方隐藏自定义视图