如何在UITableView上显示UIView?

时间:2018-04-01 12:01:28

标签: ios swift uitableview

我有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,但未显示):

enter image description here

有人知道问题是什么吗?我试图从故事板中做到这一点。

编辑:

这就是我现在所拥有的,但它仍然无法运作。它没有动画,它也只显示了视图的一部分。显然,如果我增加高度,视图会显示得更多,所以不知怎的,它表示显示的部分正好是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

    })
}

3 个答案:

答案 0 :(得分:2)

如果你正在使用autolayout,我敢打赌,你应该这样做,那么做你想做的最简单的方法是切换视图的约束,看看我在下面添加的gif。

首先要引用您要显示和隐藏的视图的顶部或底部约束。然后修改约束的常量以调整其位置,这样就可以得到视图被隐藏和显示的错觉。下面的演示也使用tableView。

希望这有帮助。

enter image description here

答案 1 :(得分:2)

在此处查看完成您想要的演示showHide

enter image description here

答案 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提供了约束

ViewToAnimates.leading = safeArea.leading“constant = 8”

ViewToAnimates.trailing = safeArea.trailing“constant = 8”

  

此约束将ViewToAnimate视图置于主视图底部之外。因此,在调用showViewButtonAction方法之前,视图将不可见。

     

ViewToAnimates.top = safeArea.bottom“constant = 0”

ViewToAnimates.height = 130

View is now out of screen

View is now visible