ios - 在 Swift 中移动 UITableView 位置

标签 ios uitableview swift uianimation

我正在尝试为 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/

相关文章:

ios - 加载数据后在 tableView 中淡入淡出

ios - 如何将数据从uitableviewcontroller发送到uitableviewcell

ios - 向下和向上滚动后 TableView 单元格与 UIView 重叠

swift - 如何将 "%"添加到ios-chart中的数据

ios - 多个长时间运行的后台任务

swift - if else 在 swift3 中不返回任何东西

ios - 如果用户不允许快速通知,则不会调用 didRefreshRegistrationToken

javascript - 如何以类似的方式从 javascript 快速调用 android 和 iOS 中的函数

ios - 在 Storyboard中使用 Xib 时,Xib 的 IBOutlets 返回 nil

iphone - 如何填充 UITableViewCell 的背景颜色?