【问题标题】:UIStackView subviews animating only when isHidden is set to falseUIStackView 子视图仅在 isHidden 设置为 false 时才动画
【发布时间】:2019-07-25 08:53:30
【问题描述】:

我正在尝试在动画块中隐藏/显示UIStackView 的子视图,如下所示:

UIView.animate(withDuration: 0.3) {
   self.unpairSensorButton.isHidden = isHidden
}

显示动画效果很好,但是当我尝试隐藏它时,它只是等待动画持续时间然后立即消失。知道为什么吗?

我曾尝试使用 layoutIfNeeded() 并将其放入 DispatchQueue.main.async 块机器人中,但均无济于事。

【问题讨论】:

  • 您预计会发生什么?你预计它会淡出吗?
  • 这是一个垂直的堆栈视图,所以我希望它会出现在与显示相反的动画中。但它只是突然消失了。
  • 我仍然没有得到你想要发生的事情。如果要淡入,请将 alpha 设置为 1。如果要使其淡出,请将 alpha 设置为 0。isHidden 不可动画。
  • 当然是动画的。这就是为什么当我将 isHidden 设置为 true 时它会动画。
  • 所以它有效?那你的代码有什么问题?

标签: swift animation uistackview


【解决方案1】:

isHidden 属性本身不可动画。 UIStackView 基本上会在您隐藏某些子视图时更改其内部约束以适应其大小。由于约束是可动画的,您可以这样做:

unpairSensorButton.isHidden = isHidden
UIView.animate(withDuration: 0.3) {
   self.view.layoutIfNeeded()
}

在动画块中调用layoutIfNeeded() 将使布局过程动画化。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
相关资源
最近更新 更多