StackView 中的动画 DatePicker hide/show
Animate DatePicker hide/show in StackView
如何在 stackView 中正确设置 datePicker appearance/disappearance 的动画?目前我这样试过:
UIView.animateWithDuration(0.3, animations: {
self.datePickerView.hidden = !self.datePickerView.hidden
})
这会导致隐藏动画出现问题 - 它很好地开始,然后最后 datePickerView 在 datePicker 所在的顶部闪烁了一点。有什么建议吗?
我遇到了同样的问题并通过这种方式解决了:
- 将您的 Picker 放在一个视图中(我们称之为 pickerContainerView)
- 为您的 pickerContainerView 设置 216 高度限制(选择器默认高度)
- 将约束优先级设置为 999 以安静 "UISV-hiding" 约束警告
- 将选择器的 "leading"、"trailing" 和 "center vertically" 约束添加到 pickerContainerView
- pickerContainerView 的动画隐藏:
Swift 2
UIView.animateWithDuration(0.3, animations: {
self.pickerContainerView.hidden = !self.pickerContainerView.hidden
})
Swift 3, 4, 5
UIView.animate(withDuration: 0.3, animations: {
self.pickerContainerView.isHidden = !self.pickerContainerView.isHidden
})
使用容器来容纳选择器并设置 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
})
如何在 stackView 中正确设置 datePicker appearance/disappearance 的动画?目前我这样试过:
UIView.animateWithDuration(0.3, animations: {
self.datePickerView.hidden = !self.datePickerView.hidden
})
这会导致隐藏动画出现问题 - 它很好地开始,然后最后 datePickerView 在 datePicker 所在的顶部闪烁了一点。有什么建议吗?
我遇到了同样的问题并通过这种方式解决了:
- 将您的 Picker 放在一个视图中(我们称之为 pickerContainerView)
- 为您的 pickerContainerView 设置 216 高度限制(选择器默认高度)
- 将约束优先级设置为 999 以安静 "UISV-hiding" 约束警告
- 将选择器的 "leading"、"trailing" 和 "center vertically" 约束添加到 pickerContainerView
- pickerContainerView 的动画隐藏:
Swift 2
UIView.animateWithDuration(0.3, animations: {
self.pickerContainerView.hidden = !self.pickerContainerView.hidden
})
Swift 3, 4, 5
UIView.animate(withDuration: 0.3, animations: {
self.pickerContainerView.isHidden = !self.pickerContainerView.isHidden
})
使用容器来容纳选择器并设置 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
})