我正在尝试为 UITableView
设置动画,以便当 View 出现时,它会从屏幕底部向上滑动。我尝试过使用来自不同问题的大量不同方法,但没有任何建议对我有用。
我目前的情况是这样的:
override func viewDidLoad() {
super.viewDidLoad()
menuTableView.layer.cornerRadius = 7
menuTableView.delegate = self
menuTableView.dataSource = self
view.addSubview(menuTableView)
menuTableView.frame.origin.y = menuTableView.frame.origin.y + menuTableView.frame.height
// Do any additional setup after loading the view.
}
override func viewDidAppear(animated: Bool) {
if (menuTableView.indexPathForSelectedRow() != nil) {
menuTableView.deselectRowAtIndexPath(menuTableView.indexPathForSelectedRow()!, animated: true)
}
UIView.animateWithDuration(10, animations: {
self.menuTableView.frame.origin.y - menuTableView.frame.height
})
}
有人建议将 UITableView
添加为 subview ,所以我尝试了,但它也不起作用。 table 就留在原处。
有人知道在 Swift 中工作的方法吗?
最佳答案
您可以尝试更改表格 contentInset 而不是更改框架。
override func viewDidLoad() {
super.viewDidLoad()
menuTableView.layer.cornerRadius = 7
menuTableView.delegate = self
menuTableView.dataSource = self
view.addSubview(menuTableView)
menuTableView.contentInset = UIEdgeInsets(top: self.view.bounds.height, left: 0, bottom: 0, right: 0)
}
override func viewDidAppear(animated: Bool) {
if (menuTableView.indexPathForSelectedRow() != nil) {
menuTableView.deselectRowAtIndexPath(menuTableView.indexPathForSelectedRow()!, animated: true)
}
UIView.animateWithDuration(10, animations: {
self.menuTableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
})
}
因此表格 View 始终保持在顶部,只有表格单元格的顶部边缘从底部移动到顶部。
============================================= =========================
编辑
我稍微更改了您的代码以使背景图像一起移动。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var frame = self.menuTableView.frame
frame.origin.y += menuTableView.frame.height
self.menuTableView.frame = frame
}
override func viewDidAppear(animated: Bool) {
if (menuTableView.indexPathForSelectedRow() != nil) {
menuTableView.deselectRowAtIndexPath(menuTableView.indexPathForSelectedRow()!, animated: true)
}
UIView.animateWithDuration(10, animations: {
var frame = self.menuTableView.frame
frame.origin.y -= self.menuTableView.frame.height
self.menuTableView.frame = frame
})
}
1:如果您想在应用所有约束后更改框架,请将您的初始框架代码放在 viewDidLayoutSubviews 中。
2:为了能够改变frame,需要调用frame属性的setter。
someView.frame = someFrame
如果还有问题,请告诉我。
编辑
工作演示的 Github 链接:https://github.com/liusally/SlideUpMenuTableView
关于ios - 在 Swift 中移动 UITableView 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29702116/