如何使用自动布局在UIScrollView中设置视图高度的动画?

时间:2018-10-19 11:08:48

标签: ios uiview autolayout ios-autolayout

UIScrollView包含三个子视图:UIView1UIView2UIView3

enter image description here

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

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

当按下Button时,UIView2会折叠到0(动画)的高度。再次按下Button时,应将UIView2动画化为原始高度。

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

如果UIView2的高度是固定的,则将高度限制从0设置为固定值(例如100),反之亦然是没有问题的。但是由于高度不是固定的而是取决于子视图,所以我不知道UIView2的确切高度。 该如何解决?

3 个答案:

答案 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;
}];

参考:UIStackView Documentation

答案 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;
}
}