2017-11-23 17 views
0

ボタンをクリックしたときに、UITableViewドロップダウンを達成しようとしています。最初はtableViewを非表示にし、ユーザーがボタンを押したときにはドロップダウンする必要があります。私はUIStackViewでこれを達成しようとしてきましたが、成功しませんでした。たぶん私は間違ってやっているかもしれないし、多分これを行う別のアプローチがあります。UITableViewをスタックビューでドロップする

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はなく、無アニメーションで消えて取得することができます。何かご意見は?

+0

「UIView.animate」ブロックを使用しないでください。 – jjatie

+0

@jjatieはい、同じ動作です。 –

+0

私はまったく同じことをやったことがあります。唯一の違いは 'UIView.animate'を呼び出さず、' stackView.translatesAutoresizingMaskIntoConstraints = false'を設定しないことです。次に、ストーリーボード(またはコード)で、適切な制約があることを確認します。私の経験上、 'UIStackView'は自動レイアウトが必要です – jjatie

答えて

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) 
     }) 
関連する問題