【问题标题】:How to animate view height within UIScrollView using autolayout?如何使用自动布局在 UIScrollView 中为视图高度设置动画?
【发布时间】:2018-10-19 11:08:47
【问题描述】:

UIScrollView 包含三个子视图:UIView1UIView2UIView3

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

UIView2 的高度也由它的子视图定义。不过应该可以切换UIView2的可见性

Button 被按下时,UIView2 应该折叠到高度为 0(动画)。当再次按下Button 时,UIView2 应该被动画化回原来的高度。

我该怎么做(在 Objsctiv-C 中)?

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

【问题讨论】:

    标签: ios uiview autolayout ios-autolayout


    【解决方案1】:

    创建两个约束,一个用于高度,另一个用于顶部空间,如您的 .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;
    }
    }
    

    【讨论】:

      【解决方案2】:

      您可以创建 2 个约束

      1- View2 高度限制 = 0 => 优先级 = 999

      2- 对 View2 的 SubView3 底部约束 => 优先级 = 1000

      当你想隐藏视图 2 切换优先级和动画

      【讨论】:

        【解决方案3】:

        一个简单直接的解决方案是将您的 UIView1UIView2UIView3 包含在 UIStackView

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

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

        参考:UIStackView Documentation

        【讨论】:

          猜你喜欢
          • 2015-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-29
          • 1970-01-01
          • 2013-10-21
          相关资源
          最近更新 更多