当前位置: 首页 > 知识库问答 >
问题:

在自动布局中,如何“隐藏”UIView?

尹凌龙
2023-03-14

在我的UITableViewCell中,我有两个UIView堆叠在一起。让我们称之为顶部和底部。

俯视图对superview具有前导、尾随和顶部约束。它的高度约束为20。

底部视图对superview具有前导、尾随和底部约束。它的高度约束为20。

顶部和底部具有垂直约束。

以编程方式“隐藏”底部视图(并使顶部视图接触超级视图的底部)的最简单方法是什么?我不想再创建任何约束,因为我确实在情节提要中设计了它,而且我不想激活/禁用约束。

共有3个答案

阮炯
2023-03-14

可以将俯视图的高度约束增加到40,将俯视图的高度约束减少到0。就我个人而言,我更喜欢将“底部视图高度”约束设置为20,并将一个约束添加到topView bottom,该约束等于bottomView top。如果要隐藏底部视图,只需将底部视图的高度约束更改为0。希望有帮助。如果你需要,我可以在Xcode中发布一些图片。

乐正远
2023-03-14

正确的方法

俯视图对superview具有前导、尾随和顶部约束。它的高度约束为20。

底部视图具有前导、尾随、底部约束以监督视图和顶部约束以顶视图。

而不仅仅是在您的单元格内为高度Constratint创建一个属性:

@property (nonatomic, weak) IBOutlet NSLayoutConstraint *heightConstraint;

当您需要更改大小时,请调用以下代码:

self.heightConstraint.constant = 40;
[self.view layoutIfNeeded];

或使用动画:

self.heightConstraint.constant = 40;
[UIView animateWithDuration:0.3 animations:^{
    [self.contentView layoutIfNeeded];
}];
杨赞
2023-03-14

如果不需要针对iOS 8及以下版本,最简单的方法是将这两个视图嵌入到UIStackView中。然后,您只需通过设置其隐藏属性来隐藏视图,堆栈视图将自动更新布局:

每当视图被添加、删除或插入到排列的子视图数组中,或每当排列的子视图的某个隐藏属性更改时,堆栈视图都会自动更新其布局。

由于父视图是表视图单元格,您可能必须告诉表视图重新计算单元格高度(除非您使用自动调整单元格大小,否则这可能会自动工作,我不确定)。您可以通过向表视图发送空的开始更新对来强制重新计算:

tableView.beginUpdates()
tableView.endUpdates()
 类似资料:
  • 我觉得显示/隐藏是一个相当常见的范例,最常见的是,具体取决于业务逻辑。我的问题是,使用自动布局响应隐藏视图的最佳方式是什么,就好像它们的框架是0x0一样。这是一个1-3个功能的动态列表示例。 现在我有一个10px的顶部空间,从按钮到最后一个标签,当标签被隐藏时,它显然不会向上滑动。现在,我创建了这个约束的出口,并根据显示的标签数量修改常量。这显然有点麻烦,因为我使用负常量值将按钮推到隐藏帧上。这也

  • 我已经在IB中设计了我的自定义单元,将其子类化,并将我的插座连接到我的自定义类。我在单元格内容中有三个子视图,它们是:UIView(cdView)和两个标签(titleLabel和emailLabel)。根据每行可用的数据,有时我希望在单元格中显示UIView和两个标签,有时只显示两个标签。我想做的是这样设置约束,如果我将UIView属性设置为hidden,或者将其从superview中删除,则两

  • 我在努力使用我的应用程序。它应该像下面这样工作。

  • 问题内容: 我正在尝试一些非常基本的东西:我列出了5个按钮。它们位于FlowLayout中,通常的想法是,一旦我单击一个,它将消失,而其他应该相应地重新排序。 现在,如果我调用setVisible(false),该按钮将变为不可见,但它仍在Layoutmanager中占据它的空间。 有什么办法可以在隐藏它的同时将Button保留在JPanel中,以便它不会被Layout拾取? 更新:: 感谢您提供

  • 通过引导程序看起来他们支持折叠较小屏幕的菜单栏项。页面上的其他项目有类似的吗? 例如,我有一个和导航药丸一起漂浮的权利。在小屏幕上,这会导致问题。我想至少把它放在一个类似的点击显示更多的下拉列表中。 这在现有的Bootstrap框架中可能吗?

  • 求一个插件或者json setting能够在打开项目的时候隐藏每个js文件最上面的一大堆imports. 主要是前端。 后端的引用还好,主要是前端引用一堆组件库的东西,太长了,有点烦人。 感谢了~