【问题标题】:Animate DatePicker hide/show in StackView在 StackView 中动画 DatePicker 隐藏/显示
【发布时间】:2016-07-05 14:51:28
【问题描述】:

如何正确地为 stackView 中的 datePicker 外观/消失设置动画?目前我是这样尝试的:

UIView.animateWithDuration(0.3, animations: {
    self.datePickerView.hidden = !self.datePickerView.hidden
})

这会导致隐藏动画出现问题 - 它开始很好,然后最后 datePickerView 在 datePicker 所在的顶部闪烁一点。有什么建议吗?

【问题讨论】:

    标签: ios swift uidatepicker uistackview


    【解决方案1】:

    我遇到了同样的问题并通过这种方式解决了:

    • 将您的 Picker 放在一个视图中(我们将其称为 pickerContainerView)
    • 为您的 pickerContainerView 设置 216 高度约束(选择器默认高度)
    • 将约束优先级设置为 999 以消除“UISV-hiding”约束警告
    • 将“前导”、“尾随”和“垂直居中”约束从您的选择器添加到 pickerContainerView
    • pickerContainerView 的动画隐藏:

    斯威夫特 2

    UIView.animateWithDuration(0.3, animations: {
        self.pickerContainerView.hidden = !self.pickerContainerView.hidden
    })
    

    斯威夫特 3、4、5

    UIView.animate(withDuration: 0.3, animations: {
        self.pickerContainerView.isHidden = !self.pickerContainerView.isHidden
    })
    

    【讨论】:

    • 我试过这个解决方案,但我不喜欢这个动画。 datePicker 高度并没有减少,只是延迟后消失,这很奇怪。
    • @FrédéricAdda 如果您想要更好的动画,只需将 UIDatePicker.topAnchor 固定到选取器容器 topAnchor 并删除 UIDatePicker 的垂直中心约束。这将产生看起来像覆盖 UIDatePicker 而不是移动和缩小的动画(就像在发布的 gif 中一样)。
    【解决方案2】:

    使用容器来保存选择器并设置 clipsToBounds = true 对我有用。

    我正在使用 PureLayout,但它也应该适用于 IB。

    startRangePickerContainer = UIView()
    startRangePickerContainer.clipsToBounds = true
    startRangePickerContainer.backgroundColor = UIColor.cyan
    stackView.addArrangedSubview(startRangePickerContainer)
    startRangePickerContainer.autoPinEdge(toSuperviewEdge: .leading)
    startRangePickerContainer.autoSetDimension(.height, toSize: 216)
    startRangePickerContainer.autoPinEdge(toSuperviewEdge: .leading)
    startRangePickerContainer.autoPinEdge(toSuperviewEdge: .trailing)
    
    startRangePicker = UIDatePicker()
    startRangePickerContainer.addSubview(startRangePicker)
    startRangePicker.autoCenterInSuperview()
    

    动画:

    UIView.animate(withDuration: 0.3, animations: {
        self.startRangePickerContainer.isHidden = !self.startRangePickerContainer.isHidden
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 2012-02-25
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2010-11-04
      相关资源
      最近更新 更多