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
はなく、無アニメーションで消えて取得することができます。何かご意見は?
「UIView.animate」ブロックを使用しないでください。 – jjatie
@jjatieはい、同じ動作です。 –
私はまったく同じことをやったことがあります。唯一の違いは 'UIView.animate'を呼び出さず、' stackView.translatesAutoresizingMaskIntoConstraints = false'を設定しないことです。次に、ストーリーボード(またはコード)で、適切な制約があることを確認します。私の経験上、 'UIStackView'は自動レイアウトが必要です – jjatie