addArrangedSubview 没有动画

Posted

技术标签:

【中文标题】addArrangedSubview 没有动画【英文标题】:addArrangedSubview without animations 【发布时间】:2016-02-16 17:39:03 【问题描述】:

我将视图添加到TZStackView(应该与UIStackView 基本相同,但对于旧版本有一个后备),如下所示:

stackView.addArrangedSubview(subview)

stackViewsubview 具有动态大小(自动布局)并自行调整大小。但是,这发生在动画中(我认为由于addArrangedSubview,如果我将其添加为子视图并设置约束,则不会发生)。有没有办法关闭动画?

【问题讨论】:

你试过 UIView performWithoutAnimation: 块吗? 我不想要动画,我想禁用正在发生的动画 我知道...这就是为什么我建议你尝试执行不使用动画 对不起,我看了performWithAnimation,我什至不知道performWithoutAnimation存在,但不幸的是它不起作用。 它确实有效。请把它写成答案,这样我才能接受;)非常感谢,我一直在寻找一整天都有效的东西:) 【参考方案1】:

在向 UIStackView 添加排列视图时禁用动画在 ios 9 中无法正常工作。

解决方案是与布局分开执行添加:

// Add all views first.

for view in views 
    stackView.addArrangedSubview(view)


// Now force the layout in one hit, sans animation.

UIView.performWithoutAnimation 
    stackView.setNeedsLayout()
    stackView.layoutIfNeeded()

在 iOS 9.3、Xcode 8.3.2 上测试。 尚未在 iOS 10 或 11 上测试。

【讨论】:

来自@mrfonda:Tested on iOS11, Xcode 9.0 (9A235) 升级到 iOS11 后,我的应用开始制作动画。这段代码帮助我防止了不需要的动画。 Xcode 9.0.1 (9A1004) stackView.addArrangedSubview(button01) stackView.insertArrangedSubview(button02, at: 0) UIView.performWithoutAnimation self.view.layoutIfNeeded() 在 iOS 11 和 12 中为我工作【参考方案2】:

UIView performWithoutAnimation: 将在没有动画的情况下执行其块参数:

UIView.performWithoutAnimation 
    stackView.addArrangedSubview(subview)

【讨论】:

这在 Xcode 8.3.2、iOS 9.3 中不起作用。无论您在何处添加“performWithoutAnimation”调用,仍然会发生一些动画。它只是改变了动画的性质。我认为这是一个错误和功能错误的 API。请参阅 iOS 9 中的新答案以获取解决方案。

以上是关于addArrangedSubview 没有动画的主要内容,如果未能解决你的问题,请参考以下文章

addSubview 和 addArrangedSubview 不显示内容

addArrangedSubview 与 addSubview

addArrangedSubview 是重叠视图

UISTackView没有有用的ReadableContentGuide

clipsToBounds 在 UIStackView 中似乎没有效果

为啥我的 Accordion 关闭动画没有触发?它打开(有动画)但没有动画关闭