3D触摸Peek在变换倒置表视图单元格中

时间:2018-03-27 12:54:25

标签: ios uitableview ios9 3dtouch peek-pop

我有一个聊天应用程序,我使用倒置表视图技术(表视图使用变换缩放到(1,-1),并且所有单元格本身也缩放为(1,-1),中和效果,从而有效地反转表格视图,以显示"底部的第一个单元格,以及#34; start"从底部的表视图。一切都很好,除了我需要实现偷看和弹出手势。我已将表格视图单元格内的按钮连接到目标视图控制器,并启用了peek和pop,如下所示:

enter image description here

这个手势很有效,但是当我3D部分触摸并保持足够突出被触摸的项目(但不会弹出预览视图控制器)时,我会看到倒置视图:

enter image description here

如何在仍然使用倒置表视图的情况下使用正确的变换弹出视图?

1 个答案:

答案 0 :(得分:2)

轻轻按下后显示视图倒置的原因不是因为它从单元格中删除了转换。事实上,对单元格的转换保持不变,但是segue将单元格视图拉出tableView的上下文。因此,对细胞的变换不再受到桌子上的变换的抵消。

我相信您可以通过继承UIStoryboardSegue来解决这个问题,但是在底部切换启动表的方法可能要容易得多。查看this question上接受的答案。

我使用了一个稍微修改过的版本,它考虑了导航栏和状态栏:

func updateTableContentInset() {
    let numRows = tableView(self.tableView, numberOfRowsInSection: 0)
    var contentInsetTop = self.tableView.bounds.size.height - (self.navigationController?.navigationBar.frame.size.height)! - 20
    for i in 0..<numRows {
        let rowRect = self.tableView.rectForRow(at: IndexPath(item: i, section: 0))
        contentInsetTop -= rowRect.size.height
        if contentInsetTop <= 0 {
            contentInsetTop = 0
        }
    }
    self.tableView.contentInset = UIEdgeInsetsMake(contentInsetTop, 0, 0, 0)
}

只需将此添加到您的UITableViewController并在viewDidLoad()上调用它,并且每次向表中添加新行时。

添加新行然后调用updateTableContentInset()后,你必须像这样滚动到底部:

tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)

由于此处没有任何内容,因此您的Peek segue不会出现问题。