Ios 如何使用autolayout在UIScrollView中设置视图高度动画?

Ios 如何使用autolayout在UIScrollView中设置视图高度动画?,ios,uiview,autolayout,ios-autolayout,Ios,Uiview,Autolayout,Ios Autolayout,uicrollview包含三个子视图:UIView1、UIView2和UIView3 UIView1和UIView3的高度由使用自动布局约束的这些视图的内容定义 UIView2的高度也由其子视图定义。但是,应该可以切换UIView2的可见性 按下按钮时,UIView2应折叠到0高度(动画)。再次按下按钮时,应将UIView2设置为动画,使其恢复到原始高度 如何(在ObjActiv-C中)执行此操作? 如果UIView2的高度是固定的,则将高度constraint从0设置为固定值(例如100)或

uicrollview
包含三个子视图:
UIView1
UIView2
UIView3

UIView1
UIView3
的高度由使用自动布局约束的这些视图的内容定义

UIView2
的高度也由其子视图定义。但是,应该可以切换
UIView2
的可见性

按下
按钮
时,
UIView2
应折叠到0高度(动画)。再次按下
按钮
时,应将
UIView2
设置为动画,使其恢复到原始高度

如何(在ObjActiv-C中)执行此操作?


如果
UIView2
的高度是固定的,则将高度constraint从0设置为固定值(例如100)或从0设置为固定值是没有问题的。但由于高度不是固定的,而是取决于子视图,因此我不知道
UIView2
的确切高度如何解决此问题?

您可以创建两个约束

1-视图2高度约束=0=>优先级=999

2-子视图3对视图2的底部约束=>priority=1000


如果要隐藏视图2,请切换优先级并设置动画

一个简单而直接的解决方案是将UIView1、UIView2和UIView3包含在UIStackView

然后,可以直接在UIView动画块内设置这3个视图中任一视图的隐藏属性,以设置这些视图的外观动画

[UIView animateWithDuration:0.25 animations:^{
    self.secondView.hidden = YES;
}];

参考:

创建两个约束,一个用于高度,另一个用于顶部空间,如.h文件中的以下内容

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *view2HeightConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *view2TopSpaceFromView1;
在you.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;
}
}