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

时间:2016-04-30 18:17:54

标签: ios swift uiview autolayout

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

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

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

顶部和底部有垂直约束。

以编程方式“隐藏”底部视图的最简单方法是什么(并且顶视图触摸超视图的底部)?我不想创建任何更多的约束,因为我在故事板中设计了这个,我宁愿不激活/禁用约束。

3 个答案:

答案 0 :(得分:6)

如果您不需要定位iOS 8及更低版本,最简单的方法是将两个视图嵌入UIStackView。然后,您可以通过设置其hidden属性来隐藏视图,并且堆栈视图将automatically update the layout

  

无论何时添加,删除或插入arrangedSubviews数组中的视图,或者每当其中一个已排列的子视图的hidden属性发生更改,堆栈视图都会自动更新其布局。

由于您的父视图是表格视图单元格,您可能必须告诉表格视图重新计算单元格高度(除非您使用自动调整单元格,然后这可能会自动生效,我不确定)。您可以通过向表格视图发送空beginUpdates / endUpdates对来强制重新计算:

tableView.beginUpdates()
tableView.endUpdates()

答案 1 :(得分:2)

正确的方式:

顶视图对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];
}];

答案 2 :(得分:1)

您可以将顶视图的高度约束增加到40并将底部视图的高度约束减少到0.我个人更喜欢将底部视图高度约束设置为20并向topView底部添加一个等于bottomView的约束最佳。如果我想隐藏bottomView我只需将bottomView的高度约束更改为0。 希望能帮助到你。如果您需要,我可以在Xcode中发布一些图片。