addArrangedSubview 没有动画
Posted
技术标签:
【中文标题】addArrangedSubview 没有动画【英文标题】:addArrangedSubview without animations 【发布时间】:2016-02-16 17:39:03 【问题描述】:我将视图添加到TZStackView
(应该与UIStackView
基本相同,但对于旧版本有一个后备),如下所示:
stackView.addArrangedSubview(subview)
stackView
和 subview
具有动态大小(自动布局)并自行调整大小。但是,这发生在动画中(我认为由于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
UISTackView没有有用的ReadableContentGuide