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

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

stackView.addArrangedSubview(subview)

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

【问题讨论】:

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

标签: ios swift uistackview tzstackview


【解决方案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 中的新答案以获取解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 2021-07-03
  • 1970-01-01
  • 2017-06-21
  • 2015-12-30
  • 2020-05-19
  • 2013-03-06
相关资源
最近更新 更多