swift - 无法从 `UIStackView` 中删除轴动画

标签 swift animation uistackview

我在界面构建器中构建了一个 UIStackView ,当它的 axis 属性从 vertical 更改为 horizo​​ntal super View 从纵向旋转为横向。问题是,这会导致两个排列的 subview 的动画,其中一个 View 在过渡到新位置时与另一个 View 重叠。

就我而言,我只想删除特定的动画并立即强制 View 到达其结束位置。

我尝试从 VC 中的 stackview 层删除所有动画:

public override func willTransition(to newCollection: UITraitCollection,
                                    with coordinator: UIViewControllerTransitionCoordinator) {

    coordinator.animate(alongsideTransition: {
        _ in
        // The first subview is `UIStackView`           
        self.view.subviews[0].layer.removeAllAnimations()
    })

    super.willTransition(to: newCollection, with: coordinator)
}

axis 属性更改时,我观察到了动画键,因为这似乎发生在转换期间的某个地方(由界面构建器自动设置)。不幸的是我没有运气,因为该层为 stackview 及其 subview /arrangedSubviews 上的 animationKeys 返回 nil

class StackView : UIStackView {

    override var axis: UILayoutConstraintAxis {

        didSet { /* here */ }
    }
}

最佳答案

我认为这将具有挑战性。有一个很好的演示,说明您正在尝试做什么 over here如果它显示的轴动画是您想要摆脱的内容,那么很确定它超出了 UIStackView 设计空间。

非常确定“立即强制 View 到其最终位置”的最佳解决方案实际上是为每个轴提供一个 UIStackView 并在旋转时在它们之间移动内容。

您还可以尝试在 viewWillTransition(to:with:) 中放置一个 performWithoutAnimation block ,在完成时调用 updateConstraintsIfNeeded ?也许那会起作用。不过,我会选择双 View 的想法,而不是那样!

关于swift - 无法从 `UIStackView` 中删除轴动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43165601/

相关文章:

swift - 使用 AVMutableComposition 将音轨合并到单个轨道中

ios - 如何在执行其他事件时忽略该事件?

ios - UIGestureTap 关闭 View

opengl - 具有养育问题的骨骼动画

android - 矢量绘图中的微光动画

css - 如何使 `react-beautiful-dnd` 不触发 `react-transition-group` 动画?

ios 检查用户是否登录到 icloud,如果没有则将用户发送到设置

ios - 更改堆栈 View 轴时打破约束

ios - 水平 UIStackView - 固定中心项目的大小并拉伸(stretch)其他项目

ios - Swift:如何在垂直堆栈 View 中水平居中元素