在我的UITableViewCell中,我有两个UIView堆叠在一起。我们称它们为顶部和底部。
顶视图对superview具有前导,尾随和顶部约束。它的高度约束为20。
底部视图对superview具有前导,尾随和底部约束。它的高度约束为20。
顶部和底部有垂直约束。
以编程方式“隐藏”底部视图的最简单方法是什么(并且顶视图触摸超视图的底部)?我不想创建任何更多的约束,因为我在故事板中设计了这个,我宁愿不激活/禁用约束。
答案 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中发布一些图片。