Ios 使用isHidden的UIStackView动画

Ios 使用isHidden的UIStackView动画,ios,animation,uiview,uistackview,Ios,Animation,Uiview,Uistackview,[编辑] 我推送了一个包含零高度约束的解决方案的提交,但是,现在我必须处理隐式UISV约束 我花了几个小时来了解如何更改堆栈视图中出现/消失项目的动画。 我想从屏幕底部设置这两个按钮的显示动画,但是,它们总是从右上角飞行: 有没有办法将动画配置为从底部开始? 附言 动画块: UIView.animate(withDuration: 5.0, delay: 0.5, options: .curveEaseInOut,

[编辑] 我推送了一个包含零高度约束的解决方案的提交,但是,现在我必须处理隐式UISV约束

我花了几个小时来了解如何更改堆栈视图中出现/消失项目的动画。 我想从屏幕底部设置这两个按钮的显示动画,但是,它们总是从右上角飞行:

有没有办法将动画配置为从底部开始? 附言

动画块:

UIView.animate(withDuration: 5.0,
                   delay: 0.5,
                   options: .curveEaseInOut,
                   animations:
        {
            self.buttons.forEach { $0.isHidden = !$0.isHidden }
            self.stack.layoutIfNeeded()
        }, completion: nil)

我已经使用高度约束的动画修复了它。似乎这是实现该行为的唯一方法。

这里有两种方法可以使按钮看起来像是从屏幕底部向上滑动。这两种方法都不涉及更改堆栈视图的高度或按钮的isHidden

解决方案1 如果视图控制器视图的底部边缘(场景的“根视图”)位于屏幕的底部边缘,或者启用了“剪辑到边界”,则此解决方案效果良好

将堆栈视图的底部约束到根视图安全区域的底部,优先级为999。 将堆栈视图的顶部约束到根视图的底部,而不是安全区域,优先级为1000,但通过取消选中其属性检查器中的“Installed”(已安装),使此约束处于非活动状态。将名为stackHidingConstraint的出口连接到此约束。 要切换按钮的可见性,请设置stackHidingConstraint.isActive=!stackHidingConstraint.isActive。当约束处于活动状态时,它通过将堆栈视图放置在根视图的底部边缘来隐藏按钮。当约束处于非活动状态时,priority-999底部边缘约束通过将堆栈视图置于根视图安全区域的底部边缘上方来显示按钮

看起来是这样的:

解决方案2 如果场景根视图的下边缘不在屏幕的下边缘,并且未启用“剪裁到边界”(Clip to Bounds)功能,但需要对视图层次进行小的更改,则此解决方案适用于解决方案1

将堆栈视图嵌入到容器视图中。让我们称之为堆栈隐藏视图。 为堆栈隐藏视图启用“剪裁到边界”。 将堆栈隐藏视图的左、右和下边缘约束到根视图安全区域的左、右和下边缘。 将堆栈视图的左、右和上边缘约束到堆栈隐藏视图的左、右和上边缘。 将堆栈视图的底边约束到堆栈隐藏视图的底边,优先级为999。 将堆栈隐藏视图的高度约束为0。将名为stackHidingConstraint的出口连接到此约束。使此约束处于非活动状态并在情节提要中卸载。 再次,要切换按钮的可见性,请设置stackHidingConstraint.isActive=!stackHidingConstraint.isActive。当约束处于活动状态时,它通过将堆栈隐藏视图的高度设置为零来隐藏按钮。由于堆栈隐藏视图会剪裁其子视图,因此子视图将不可见。当约束处于非活动状态时,priority-999底部边缘约束使堆栈隐藏视图的高度与堆栈视图的高度相等,因此子视图可见

看起来是这样的:

与解决方案1唯一可见的区别是,在解决方案1中,可以看到按钮在选项卡栏下滑动。在解决方案2中,它们不会滑到选项卡栏下


你可以在这里找到我的测试项目:

你能只显示你的动画块吗?你链接到的项目没有任何堆栈视图或动画代码。我认为堆栈视图不适合这种动画。首先,为什么要使用stackview进行此操作?@AbizernUploaded@RakeshaShastri,因为它的布局比常规UIView更简单。这是错误的。您应该自下而上设置完整按钮的动画。不设置高度的动画。用户知道其中的区别。请看一看罗布的回答。为你的努力鼓掌!在我看来,你应该看到按钮从吧台下滑动。