我有UIViewController
,其中包含表格视图和简单视图。他们俩都处于同一水平。
启动时,我的视图开始隐藏在底部,当我按下按钮时,我希望我的视图向上滑动。当我这样做时,只显示视图的1/4而不是完整视图。
在添加表格视图之前,这项工作没问题,但现在我不明白为什么它没有完全显示。
以下是显示和隐藏我的观点的代码:
func showPicker(date: Date?) {
UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseOut], animations: {
self.timePickerView.transform = CGAffineTransform(translationX: 0, y: 0)
}, completion: { _ in
})
}
func hidePicker() {
UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseOut], animations: {
self.timePickerView.transform = CGAffineTransform(translationX: 0, y: self.timePickerView.frame.size.height)
}, completion: { _ in
})
}
以下是视图的截图(按钮下方应显示UIDatePicker
,但未显示):
有人知道问题是什么吗?我试图从故事板中做到这一点。
编辑:
这就是我现在所拥有的,但它仍然无法运作。它没有动画,它也只显示了视图的一部分。显然,如果我增加高度,视图会显示得更多,所以不知怎的,它表示显示的部分正好是220高度,这很奇怪:/
func hidePicker() {
self.pickerBottomConstraint.constant = -220
UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseOut], animations: {
self.timePickerView.layoutIfNeeded()
}, completion: { _ in
})
}
func showPicker(date: Date?) {
self.pickerBottomConstraint.constant = 0
UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseOut], animations: {
self.timePickerView.layoutIfNeeded()
}, completion: { _ in
})
}
答案 0 :(得分:2)
如果你正在使用autolayout,我敢打赌,你应该这样做,那么做你想做的最简单的方法是切换视图的约束,看看我在下面添加的gif。
首先要引用您要显示和隐藏的视图的顶部或底部约束。然后修改约束的常量以调整其位置,这样就可以得到视图被隐藏和显示的错觉。下面的演示也使用tableView。
希望这有帮助。
答案 1 :(得分:2)
在此处查看完成您想要的演示showHide
答案 2 :(得分:0)
而不是变换,改变你的观点中心位置 例如:
@IBOutlet weak var viewToAnimateOutlet: UIView!
@IBAction func showViewButtonAction(_ sender: Any) {
UIView.animate(withDuration: 1.5) {
self.viewToAnimateOutlet.center.y -= self.viewToAnimateOutlet.frame.height
}
}
@IBAction func hideViewButtonAction(_ sender: Any) {
UIView.animate(withDuration: 1.5) {
self.viewToAnimateOutlet.center.y += self.viewToAnimateOutlet.frame.height
}
}
我做了什么:
我使用了autolayout并为ViewToAnimate View提供了约束
此约束将ViewToAnimate视图置于主视图底部之外。因此,在调用showViewButtonAction方法之前,视图将不可见。
ViewToAnimates.top = safeArea.bottom“constant = 0”