5

我有一个聊天应用程序,我正在使用倒置表格视图技术(表格视图通过变换缩放到 (1, -1),并且所有单元格本身也缩放到 (1, -1),中和了效果,从而有效地反转表格视图以在底部显示“第一个”单元格)从底部“启动”表格视图。一切正常,除了我需要实现 peek 和 pop 手势。我已将表格视图单元格内的按钮连接到目标视图控制器,并启用 peek 和 pop,如下所示:

在此处输入图像描述

手势有效,但当我部分 3D 触摸并按住足以突出触摸的项目(但不弹出预览视图控制器)时,我得到了倒置视图:

在此处输入图像描述

如何使视图弹出正确的变换,同时仍使用倒置表视图?

4

1 回答 1

2

轻按后它显示颠倒视图的原因不是因为它从单元格中删除了变换。事实上,单元格上的转换保持原样,但 segue 将单元格视图拉出 tableView 的上下文。因此,单元格上的变换不再被表格上的变换抵消。

我相信你可以通过继承 UIStoryboardSegue 来解决这个问题,但是切换你在底部启动表格的方法可能会容易得多。查看有关此问题的已接受答案。

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

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 不会有任何问题。

于 2018-04-01T11:55:47.083 回答