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

3
在我的UITableViewCell中,我有两个UIView叠放在一起。让我们称它们为Top和Bottom。
Top视图与Superview之间有前导、尾随和顶部约束。它的高度约束为20。
Bottom视图与Superview之间有前导、尾随和底部约束。它的高度约束为20。
Top和Bottom之间有一个垂直约束。
以编程方式“隐藏”Bottom View(并使Top View接触Superview底部)的最简单方法是什么?我更喜欢不创建任何额外的约束,因为我在storyboard中设计了它,并且不想激活/禁用约束。

请查看以下链接:https://youtu.be/LqHzHkuXRxQ 和 https://github.com/quantumarun/Demos/tree/master/ExpandTableCellDemo。 - Arun Gupta
3个回答

6
如果您不需要针对iOS 8及以下版本进行目标定位,则最简单的方法是嵌入两个视图到UIStackView中。然后,您可以通过设置其hidden属性来简单隐藏一个视图,而堆栈视图会自动更新布局

当视图添加、删除或插入到arrangedSubviews数组中,或者安排的子视图的hidden属性更改时,堆栈视图会自动更新其布局。

由于父视图是表格视图单元格,您可能需要告诉表格视图重新计算单元格高度(除非您正在使用自动调整大小的单元格,否则这可能会自动工作,我不确定)。您可以通过向表格视图发送空的beginUpdates/endUpdates对来强制重新计算。
tableView.beginUpdates()
tableView.endUpdates()

2

正确的方式:

顶部视图具有相对于父视图的前导、尾随和顶部约束。它有一个高度约束为20。

底部视图具有相对于父视图的前导、尾随和底部约束,以及相对于顶部视图的顶部约束。

然后在您的单元格中创建一个高度约束的属性即可:

@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];
}];

1
你可以将顶部视图的高度约束增加到40,将底部视图的高度约束减少到0。个人而言,我更喜欢将底部视图的高度约束设置为20,并添加一个约束,使顶部视图底部等于底部视图顶部。如果我想隐藏底部视图,只需将底部视图的高度约束更改为0即可。 希望有所帮助。如果需要,我可以在Xcode中发布一些图片。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接