UIScrollView
包含三个子视图:UIView1
,UIView2
和UIView3
。
UIView1
和UIView3
的高度由这些视图的内容使用自动布局约束定义。
UIView2
的高度也由其子视图定义。但是,应该可以切换UIView2
的可见性。
当按下Button
时,UIView2
会折叠到0(动画)的高度。再次按下Button
时,应将UIView2
动画化为原始高度。
如何执行此操作(在Objsctiv-C中)?
如果UIView2
的高度是固定的,则将高度限制从0设置为固定值(例如100),反之亦然是没有问题的。但是由于高度不是固定的而是取决于子视图,所以我不知道UIView2
的确切高度。 该如何解决?
答案 0 :(得分:0)
您可以创建2个约束
1- View2高度限制= 0 =>优先级= 999
2- View2的SubView3底部约束=>优先级= 1000
要隐藏“视图2”时,切换优先级并设置动画
答案 1 :(得分:0)
一个简单直接的解决方案是将 UIView1 , UIView2 和 UIView3 包含在 UIStackView 中>。
然后,您可以直接在 UIView 动画块内设置这3个视图中任何一个的 hidden 属性,以动画化这些视图中任何一个的外观。
[UIView animateWithDuration:0.25 animations:^{
self.secondView.hidden = YES;
}];
答案 2 :(得分:0)
创建两个约束,一个用于高度,另一个用于顶部空间,如您的.h文件中所示
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *view2HeightConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *view2TopSpaceFromView1;
在您的.m文件中创建如下所示的操作
- (IBAction)toggleButtonTapped:(id)sender {
UIButton *btn = (UIButton *)sender;
if ([btn isSelected])
{
[btn setSelected:false];
_view2HeightConstraint.constant = 45.0;
_view2TopSpaceFromView1.constant = 8.0;
}
else{
[btn setSelected:true];
_view2HeightConstraint.constant = 0.0;
_view2TopSpaceFromView1.constant = 0.0;
}
}