使用stackview使UITableView下拉

时间:2017-11-23 18:07:04

标签: swift xcode uitableview uistackview

当我点击按钮时,我试图获得UITableView下拉菜单。最初应该隐藏tableView,当用户按下按钮时,它应该下拉。我一直试图以UIStackView来实现这一目标,但没有成功。也许我做错了,或者可能还有另一种做法。

let stackView = UIStackView()
var btn: UIButton!
var myTableView = UITableView()

override func viewDidLoad() {
    super.viewDidLoad()
    myTableView.delegate = self
    myTableView.dataSource = self
    myTableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 1))
    myTableView.frame = CGRect(x: 0, y: 0, width: 300, height: 200)
    myTableView.center = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/2)
    myTableView.showsVerticalScrollIndicator = false

    btn = UIButton(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50))
    btn.backgroundColor = UIColor.blue.withAlphaComponent(0.3)
    btn.setTitle("DropDownMenu", for: UIControlState.normal)
    btn.titleLabel?.textColor = .white
    btn.titleLabel?.textAlignment = .center
    btn.center = CGPoint(x: self.view.frame.width/2, y: myTableView.center.y - myTableView.frame.height/2 - btn.frame.height/2)
    btn.addTarget(self, action: #selector(btnPressed), for: UIControlEvents.touchUpInside)

    stackView.axis = UILayoutConstraintAxis.vertical
    stackView.distribution = UIStackViewDistribution.equalSpacing
    stackView.alignment = UIStackViewAlignment.center
    stackView.spacing = 16.0
    stackView.translatesAutoresizingMaskIntoConstraints = false

    self.view.addSubview(btn)
    stackView.addSubview(myTableView)
    self.view.addSubview(stackView)

}

@objc func btnPressed() {
    UIView.animate(withDuration: 1) {
        self.myTableView.isHidden = !self.myTableView.isHidden
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 4
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = "This is cell " + indexPath.row.description
    cell.textLabel?.textColor = .black
    return cell
}

我可以让tableView消失,但没有动画。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我最终采用的方法不是通过UIStackView,而是简单地使用一个按钮来激活tableView的框架。框架最初设置为屏幕宽度,高度为0.当用户按下按钮时,我设置高度。

UIView.animate(withDuration: 0.25, animations: {
            self.menuTable.frame = CGRect(x: 0, y: (sender.center.y + sender.frame.height/2), width: self.view.frame.width, height: yourHeight)
        })