无法从“UIStackView”中删除轴动画
Posted
技术标签:
【中文标题】无法从“UIStackView”中删除轴动画【英文标题】:Unable to remove axis animation from `UIStackView` 【发布时间】:2017-04-02 07:11:18 【问题描述】:我有一个UIStackView
内置界面构建器,当它的超级视图从纵向旋转到横向时,它会将其axis
属性从vertical
更改为horizontal
。问题是这会导致它的两个排列的子视图的动画,其中一个视图在转换到新位置时与另一个视图重叠。
在我的情况下,我只想删除那个特定的动画并立即将视图强制到它的结束位置。
我试图从我的 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 及其子视图/arrangedSubviews 上为 animationKeys
返回 nil
。
class StackView : UIStackView
override var axis: UILayoutConstraintAxis
didSet /* here */
【问题讨论】:
【参考方案1】:我认为这将具有挑战性。如果它显示的轴动画是你想要摆脱的东西,那么有一个很好的演示,它听起来像是你正在尝试做的 over here,很确定这超出了 UIStackView
设计空间。
非常确定“立即将视图强制到其结束位置”的最佳解决方案实际上是每个轴都有一个 UIStackView 并在旋转时在它们之间移动内容。
您还可以尝试在您的viewWillTransition(to:with:)
中放置一个performWithoutAnimation
块,在完成时调用updateConstraintsIfNeeded
?也许那会奏效。不过,我会采用双视图的想法而不是那样!
【讨论】:
以上是关于无法从“UIStackView”中删除轴动画的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 9 上更改隐藏属性时 UIStackView 不会动画